Это происходит потому, что вы распространяете props
после предоставления атрибута className
вашим компонентам.
Так <ButtonTest className="aaa is-block">DEFAULT</ButtonTest>
попытается отрендерить
<button className={className} {...props}>
, который расширяется до
<button className={className} className={"aaa is-block"}>
и последний одноименный атрибут имеет преимущественную силу.
Вы можете инвертировать порядок и использовать
<button {...props} className={className} >
, чтобы спред props
былбыть переопределенным любым пользовательским реквизитом, который вы передаете.
См. https://codesandbox.io/s/oqvy6qp56z
Или вы можете извлечь реквизит, который хотите использовать напрямую, так, чтобы props
содержал только остальные
Как
const ButtonTest = ({className:passedClasses, ...props}) => {
const className = classNames(
"button is-testing is-gradient cv",
passedClasses
);
console.log("a:", className);
if (props.href) {
return (
<a href={props.href} className={className} {...props}>
{props.children}
</a>
);
}
return (
<button className={className} {...props}>
{props.children}
</button>
);
};
См. https://codesandbox.io/s/l7ro16wqz9