【发布时间】:2016-06-21 02:26:36
【问题描述】:
我希望能够为我的所有组件设置一个全局主题(变量集)以继承和扩展它们的默认变量。例如,我有一个 button 组件,它具有引用一组变量的默认样式(内联 CSS),例如 primaryColor,... 我希望能够在任何我使用的地方轻松更新这些变量这些组件无需显式传递给组件。
例如,我想要以下行为,我可以 (1) 将它们包装在一个组件中并将 primaryColor 级联到每个 Button 组件或 (2) 将此组件导出为更高阶的组件并提要更新道具等...但是,我无法使这些方法中的任何一种起作用。也许,有更好的方法或者...
(1)
render() {
return (
<Theme variables={{ 'primaryColor': 'red' }}>
<Button />
<SecondButton />
<ThirdButton />
</Theme>
);
}
(2)
render() {
return (
<div>
<Button />
<SecondButton />
<ThirdButton />
</div>
);
}
export default Theme(SampleComponent)
这种方法很有效,因为它显然是明确地传递给每个组件的:
render() {
return (
<div>
<Button variables={{ 'primaryColor': 'red' }} />
<SecondButton variables={{ 'primaryColor': 'red' }} />
<ThirdButton variables={{ 'primaryColor': 'red' }} />
</div>
);
}
【问题讨论】:
-
为什么不在你的构造函数中设置它们呢?
import your_globals from 'somewhere'然后在您的构造函数中...this.options = your_globals... 然后在渲染中您可以使用this.options.primaryColor -
这些组件中的每一个都将位于它们自己的
npm包中,因此它们无法引用其 repo 之外的一些全局。我正在考虑在 React 中使用context来实现这一点……不确定这种方法的可行性。 -
好吧,你没有在你的问题中解释,哈哈。如果它们是单独的 npm 包,那么制作一个其他人使用的 npm 包可能是值得的。这意味着如果你有一个一堆默认选项和样式的包,您可以将其作为一个包并将其安装为对其他包的依赖项
-
是的,我很抱歉!我应该更干净。我已经使用它们都继承自的全局变量模块来执行此操作,但我希望能够从使用这些组件的顶级组件中覆盖这些变量。因此,我开始使用
context功能的原因。
标签: reactjs redux higher-order-functions