- 使用情感/风格v11*
背景
为了更改项目中所有按钮的默认值type
,我为HTML <button>
编写了一个 Package 器组件WrappedButton
。为了使这个新的WrappedButton
组件成为styled
(styled(WrappedButton)({...})
),我需要用styled
Package 我的WrapperButton
。
问题
尝试在WrappedButton
上设置aria-label
属性时,出现控制台错误Using kebab-case for css properties in objects is not supported. Did you mean ariaLabel?
当我将aria-label
更改为ariaLabel
时,没有出现错误,但标签没有设置。
问题
如何在保持用例完整的同时消 debugging 误?
代码
换行按钮
type ButtonPropsType = React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;
type RefType = ((instance: HTMLButtonElement | null) => void) | React.RefObject<HTMLButtonElement> | null | undefined;
/**
* This is needed in order to allow the button to be styled by
* emotion (`styled(WrappedButton)({...})`
**/
const StylableButton = styled.button({}, (props: ButtonPropsType) => ({
...(props as any),
}));
// change default `type` from `submit` to `button`
const defaultProps: ButtonPropsType = {
type: 'button',
};
export const WrappedButton = forwardRef((props: ButtonPropsType, ref: RefType) => {
return <StylableButton {...defaultProps} ref={ref} {...props} />;
});
WrappedButton.displayName = 'Button';
用法
test('A', () => {
render(<WrappedButton aria-label='foo'>a</WrappedButton>);
});
我的尝试:
- 应向前推进 *
const StylableButton = styled('button',
{
//shouldForwardProp: (prop) => (prop !== 'aria-label')
}
)({}, (props: ButtonPropsType) => ({
shouldForwardProp: (prop) => (prop !== 'aria-label'),
...(props as any),
}));
1条答案
按热度按时间nlejzf6q1#
从vighnesh153的评论中推测出:
解决方案是从
StylableButton
的定义中删除对props
的提及:显然,一切都如预期的那样工作已经在幕后,没有提到道具。
以下是完整的来源: