为什么主题在样式组件道具中未定义?
Why is theme undefined in styled component props?
在这里,我通过将回调函数传递给样式化标签来访问主题。我猜 styled 调用这个回调函数时将 props 作为第一个参数。这很好用。
export default function SectionHeading(props: SectionHeadingProps) {
const Heading = styled.h2`
${props => props.theme.green && `
color: green;
`}
`;
return (
<Heading>{propss.children}</Heading>
);
}
在这个例子中,我传递了一个包含组件收到的道具的表达式。此处,主题未定义。
export default function SectionHeading(props: SectionHeadingProps) {
const Heading = styled.h2`
${props.theme.green && `
color: green;
`}
`;
return (
<Heading>{props.children}</Heading>
);
}
为什么第二个例子中没有定义主题?
原因是它们是不同的"props"并且它们在不同的时间被评估,在第一个例子中,道具是传递给样式化组件的道具,增加了主题(前提是你使用了<ThemeProvider .../>
。在第二个例子中,它是传递给你的组件的道具。
主题的注入是由样式组件库完成的,并且只针对样式组件。您的组件没有得到它(因为它不是样式化组件)。
顺便说一句,您的代码有冗余嵌套,每次调用时都会创建一个样式化的组件。
方法是简单定义:
const SectionHeading = styled.div`
${props => (props.theme && props.theme.green && {color: 'green'})};
`;
然后:
export default SectionHeading;
请注意,您的示例代码在第一部分中有一个拼写错误,您写了 {propss.children}
(一个额外的 's')。
在这里,我通过将回调函数传递给样式化标签来访问主题。我猜 styled 调用这个回调函数时将 props 作为第一个参数。这很好用。
export default function SectionHeading(props: SectionHeadingProps) {
const Heading = styled.h2`
${props => props.theme.green && `
color: green;
`}
`;
return (
<Heading>{propss.children}</Heading>
);
}
在这个例子中,我传递了一个包含组件收到的道具的表达式。此处,主题未定义。
export default function SectionHeading(props: SectionHeadingProps) {
const Heading = styled.h2`
${props.theme.green && `
color: green;
`}
`;
return (
<Heading>{props.children}</Heading>
);
}
为什么第二个例子中没有定义主题?
原因是它们是不同的"props"并且它们在不同的时间被评估,在第一个例子中,道具是传递给样式化组件的道具,增加了主题(前提是你使用了<ThemeProvider .../>
。在第二个例子中,它是传递给你的组件的道具。
主题的注入是由样式组件库完成的,并且只针对样式组件。您的组件没有得到它(因为它不是样式化组件)。
顺便说一句,您的代码有冗余嵌套,每次调用时都会创建一个样式化的组件。
方法是简单定义:
const SectionHeading = styled.div`
${props => (props.theme && props.theme.green && {color: 'green'})};
`;
然后:
export default SectionHeading;
请注意,您的示例代码在第一部分中有一个拼写错误,您写了 {propss.children}
(一个额外的 's')。