React.cloneElement:传递新的孩子或复制props.children
React.cloneElement: pass new children or copy props.children?
我被React.cloneElement
的第三个"children"参数以及它与this.props.children
的关系弄糊涂了。
我遵循了本指南中的高阶组件,并有以下代码:
render() {
const elementsTree = super.render()
let myPropChange = {}
/* work on newProps... */
myPropChange.something = "nice!".
const newProps = Object.assign({}, elementsTree.props, myPropChange)
/* map children */
const newChildren = React.Children.map(elementsTree.props.children, c => something(c))
return React.cloneElement(elementsTree, newProps, newChildren)
}
我应该将映射的子项放入
newProps.children
中,还是将它们作为第三个参数传递给cloneElement
?Object.assign
将孩子从props
复制到newProps
,我应该跳过它们吗?指南上写着
组件不能保证解决完整的子树。
在我的情况下,这意味着什么?
this.props.children
不在?增加了第四个问题:为什么我要克隆道具,而不仅仅是直接编辑它们?
我应该将映射的子项放入
newProps.children
中,还是将它们作为第三个参数传递给cloneElement
?
两者都应该可以。
Object.assign
将孩子从props
复制到newProps
,我应该跳过它们吗?
使用cloneElement时,您不需要自己复制道具。你可以做React.cloneElement(elementsTree, {something: 'nice!'})
。
在指南中,它说"组件不能保证完整的子树得到解决。"在我的情况下,这意味着什么?这个孩子不在那里?
我不能确定那篇文章的意思,但我相信作者的意思是,您的组件可以选择不使用this.props.children
。例如,如果渲染<Foo><Bar /></Foo>
,则Foo
将在this.props.children
中接收<Bar />
,但如果Foo
在其渲染方法中不使用this.props.children
,则永远不会渲染Bar
。
为什么我要克隆道具,而不是直接编辑它们?
React元素是不可变的,在创建元素后,您无法更改道具。这允许在React中进行一些性能优化,否则是不可能的。
- 使用Clipboard.js复制span文本
- ZeroClipboard-在复制之前添加到值
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- 复制图像路径以单击它
- 复制当前url按钮-Javascript
- 具有所有样式的文本正在复制到可编辑文本区域
- 在ReactJS中重新渲染孩子3次可以接受吗
- JavaScript”;复制“;HTML表单
- jsPlumb-拖动克隆而不进行复制
- 如何将给定的curl命令复制为jquery ajax请求
- 如何对映射插件创建的敲除对象进行深度复制
- 使用append时复制内容的DOM
- 如何将键入的文本从一个输入类型的文本复制到另一个
- 需要将单元格值复制到html表中的其他单元格中
- jQuery表单克隆,如何阻止值被复制
- 在Javascript中复制C#服务器端验证
- 将文件从应用程序文件夹复制到JQM/Phonegap应用程序中的根文件夹
- 使用Emscripten Worker API传输数据而不进行复制
- React.cloneElement:传递新的孩子或复制props.children