reactjs - React hooks - 将 JSX 元素传递给父级
问题描述
我有一个简单的父/子场景,我希望孩子负责创建一些可重用的 JSX 元素,这些元素传递给父级并由父级渲染。我找不到一种不会导致烦人的代码重复、详尽的编译器警告或无限循环的方法。下面的示例导致了一个无限循环,因为 JSX 元素reusableButton
位于依赖数组中,该数组显然在每次设置时都会发生变化。
目前我可能会诉诸绝对定位,但肯定有更好的方法来实现这一点吗?
function Parent() {
const [actions, setActions] = React.useState();
return <>
<div>{actions}</div>
...separation of concerns...
<Child setActions={setActions} />
</>
}
function Child(props) {
const { setActions } = props;
const reusableButton = <Button>I am reusable</Button>;
React.useEffect(() => {
setActions(reusableButton);
}, [setActions, reusableButton]);
if (...some condition...) {
return <div>{reusableButton}</div>;
} else {
return <div>don't repeat yourself</div>;
}
}
解决方案
根据您所描述的内容和代码示例,您应该只制作一个组件:
function ReusableButton() {
return <Button>I am reusable</Button>;
}
function Parent() {
return (
<>
<div><ReusableButton /></div>
...separation of concerns...
<Child />
</>
);
}
function Child(props) {
if (...some condition...) {
return <div><ReusableButton /></div>;
} else {
return <div>don't repeat yourself</div>;
}
}
推荐阅读
- laravel - Laravel 中的总计、数量、价格
- excel - VBA:删除某列中有空白的行并在Excel中制作一个按钮
- xslt - 如何在 XSLT 中重新排序标记化列表并一次从中读取两个值?
- objective-c - 从目标成员中删除文件后构建失败
- python - 如何修复“[WinError 5] 访问被拒绝”
- tensorflow - 在 tf.keras.layers 中使用等同于 tf.nn.rnn_cell.DropoutWrapper 的 dropout 包装器
- c# - 如何在 C# 中向 Stimulsoft 发送查询?
- reactjs - React、Emotion 和 Jest 快照:错误:缺少属性“:”
- ios - 如何在所有屏幕尺寸上调整视图的大小?
- c# - 从 PeNet API 中的对象访问字段