reactjs styled()中shouldForwardProp选项的用途是什么?

b4qexyjb  于 2023-03-12  发布在  React
关注(0)|答案(2)|浏览(113)

我能够将shouldForwardProp指定哪些 prop 应该转发到作为styled()的选项传递的 Package 元素,但是我很难找到一个可以理解的用例示例。
这里的 prop 转发类似于React中的 prop 传递吗?
为什么在使用styled()时要阻止某些 prop 被转发到 Package 的元素?
请原谅我的无知,或者如果我的问题不够清楚-我仍然在学习MUI,并试图把我的头围绕它。

bkhjykvo

bkhjykvo1#

如果您使用的是divspan等内置组件,并且希望允许用户通过一些 prop 自定义样式。

const MyComponent = styled('div')(({ bgColor }) => ({
  backgroundColor: bgColor,
}));

当你这样使用它时:

<MyComponent bgColor='red'>

prop作为attribute传递给DOM树中的真实的元素:

React会抱怨,比如:

Warning: React does not recognize the `bgColor` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `bgcolor` instead. If you accidentally passed it from a parent component, remove it from the DOM element.

这就是shouldForwardProp存在的原因,以防止样式 prop 被传递并创建无效属性:

const MyComponent = styled('div', {
  shouldForwardProp: (props) => props !== 'bgColor',
})(({ bgColor }) => ({
  backgroundColor: bgColor,
}));
gt0wga4j

gt0wga4j2#

@NearHuscarl已经给出了很好的回答!
如果你使用的是TypeScript,我使用的是utility function,所以我总是正确地输入prop名称:

export const shouldForwardProp = <CustomProps extends Record<string, unknown>>(
  props: Array<keyof CustomProps>,
  prop: PropertyKey,
): boolean => !props.includes(prop as string);

const MyComponent = styled('div', {
  shouldForwardProp: (prop) => shouldForwardProp<MyComponentProps>(['isDisabled', 'bgColor'], prop),
})<MyComponentProps>(({ theme, isDisabled, size, bgColor }) => ({
...

相关问题