ReactJS:如果所有子项都是功能组件,如何为子项添加样式?
ReactJS: How to add a style to children if all children are functional components?
我有一个项目,我想在其中应用某种样式。我尝试了下面显示的方法(not 对功能组件起作用):
const Parent = ({ children }) => {
const style = { /* ... */ }
const clones = React.Children.map(children, child => {
return React.cloneElement(child, { style: style });
});
return (
<div>
{clones}
</div>
);
};
export default Parent;
在我的搜索过程中,我发现这种方法似乎只适用于 class 组件,而不适用于功能组件。这对我来说是个问题,因为整个项目只使用功能组件。
我还发现人们通过向他们的子组件添加一个 style 道具来规避这个问题(在我的例子中,我 cannot 添加一个 style
道具到任何子组件):
const Child = ({ style }) => {
return (
<div style={style}>
hello world
</div>
);
};
export default Child;
这个方法只有在你可以编辑子组件有道具的情况下才有效,但我打算在其他不能编辑子组件的项目中使用这个模块。不幸的是,这个解决方案是不可行的。
编辑:对第 3 和第 4 段添加了更多说明。
当您将 child 传递给 parent 时,您可以看到变化。
export default function App() {
return (
<div className="App">
<Parent>
<Child />
</Parent>
</div>
);
}
只需要将子组件导入到父组件中,并传递样式属性即可
试试这个
import Child from 'path-to-child-file'
const Parent = ({ }) => {
const style = { /* ... */ }
return (
<div>
<Child style={style} />
</div>
);
};
export default Parent;
您不需要编辑您的子组件
也许,映射子项并用具有指定样式的 div 元素包装每个子项就足够了。正如我在对 OP 的评论中所写,这完全取决于所需样式修改的性质和子项的结构:
const App = () => {
return (
<div>
<h1>My App</h1>
<Parent>
<ChildComponent />
<ChildComponent />
</Parent>
</div>
);
};
const Parent = ({ children }) => {
const style = { color: "blue" };
const clones = React.Children.map(children, (child) =>
<div style={style}>{child}</div>
);
return <div>{clones}</div>;
};
const ChildComponent = () => {
return <h2>this is a child component</h2>;
};
export default App;
我有一个项目,我想在其中应用某种样式。我尝试了下面显示的方法(not 对功能组件起作用):
const Parent = ({ children }) => {
const style = { /* ... */ }
const clones = React.Children.map(children, child => {
return React.cloneElement(child, { style: style });
});
return (
<div>
{clones}
</div>
);
};
export default Parent;
在我的搜索过程中,我发现这种方法似乎只适用于 class 组件,而不适用于功能组件。这对我来说是个问题,因为整个项目只使用功能组件。
我还发现人们通过向他们的子组件添加一个 style 道具来规避这个问题(在我的例子中,我 cannot 添加一个 style
道具到任何子组件):
const Child = ({ style }) => {
return (
<div style={style}>
hello world
</div>
);
};
export default Child;
这个方法只有在你可以编辑子组件有道具的情况下才有效,但我打算在其他不能编辑子组件的项目中使用这个模块。不幸的是,这个解决方案是不可行的。
编辑:对第 3 和第 4 段添加了更多说明。
当您将 child 传递给 parent 时,您可以看到变化。
export default function App() {
return (
<div className="App">
<Parent>
<Child />
</Parent>
</div>
);
}
只需要将子组件导入到父组件中,并传递样式属性即可
试试这个
import Child from 'path-to-child-file'
const Parent = ({ }) => {
const style = { /* ... */ }
return (
<div>
<Child style={style} />
</div>
);
};
export default Parent;
您不需要编辑您的子组件
也许,映射子项并用具有指定样式的 div 元素包装每个子项就足够了。正如我在对 OP 的评论中所写,这完全取决于所需样式修改的性质和子项的结构:
const App = () => {
return (
<div>
<h1>My App</h1>
<Parent>
<ChildComponent />
<ChildComponent />
</Parent>
</div>
);
};
const Parent = ({ children }) => {
const style = { color: "blue" };
const clones = React.Children.map(children, (child) =>
<div style={style}>{child}</div>
);
return <div>{clones}</div>;
};
const ChildComponent = () => {
return <h2>this is a child component</h2>;
};
export default App;