javascript - 我可以通过 React.Children.toArray 从父级访问函数的子级吗?
问题描述
我可以通过父级访问函数的子级React.Children.toArray
吗?
这是一个Parent
计算孩子的函数。在现实世界的例子中,它应该对孩子们做点什么。
function Parent({ children }) {
// Flat children.
function flatChildren(arr, initial) {
return arr.reduce((accumulator, current) => {
if (React.isValidElement(current) && current.props.children) {
return flatChildren(React.Children.toArray(current.props.children), [
...accumulator,
current
]);
}
return [...accumulator, current];
}, initial || []);
}
const flat = flatChildren(React.Children.toArray(children));
return <div>Length: {flat.length}</div>;
}
这是一个Child
功能:
function Child() {
return (
<div>
<span>test</span>
</div>
);
}
现在,如果我使用函数或普通的 React Elements 渲染Parent
,它的工作方式就不一样了:
<>
<Parent>
<div>
<span>test</span>
</div>
</Parent>
<Parent>
<Child />
</Parent>
</>
第一个显示“长度:3”,第二个显示“长度:1”。
我可以理解为什么:React 没有执行这个功能:它是一个黑盒子。尽管如此,组件还是被渲染了,所以必须有一种方法来映射实际渲染的子级。可能吗?
旁注:我实际上调用useEffet
了我Parent
的解析孩子,所以也许我可以在这里做点什么。
解决方案
推荐阅读
- python - 使用 pyspark 从嵌套字典映射数据框中的值
- python - 我将如何附加一个带有变量(小数)和一个单词的列表,然后根据带有单词的变量打印一个从最大到最小排序的列表
- angularjs - 到达后端端点时,Https 正文字段字符会转换为十六进制
- python - 为什么在 Pandas 中导入时 all 不转换为小数?
- r - 如何生成 if 语句以输出相应的行
- ruby-on-rails - 使用 Devise 从 Turbolinks 升级到 Turbo 后,我得到“未定义的方法 `to_model' for true:TrueClass”
- datetime - 如何从飞镖中的周数和年份获取日期时间
- typescript - 未处理的承诺拒绝:错误:网络错误 + 需要周期
- android - 无法解析配置“:app:devDebugRuntimeClasspath”的所有依赖项。对存储库使用不安全的协议,没有
- python - TensorFlow方法中的Jupyter笔记本进度条问题