【发布时间】:2016-03-11 02:22:49
【问题描述】:
问题是:
如何在带有 prop ref 的节点中获取 ref(作为 ReactElement 而不是 DOM)。
以下示例
有一个类 MyTable 呈现为:
<table ref="myTable">
{this.state.list.map(name=>
<AddVarTableRow key={name} myName={name}/>
)}
</table>
在 componentDidUpdate 中,想要这样做:
React.Children.forEach(this.refs.tbody.props.children, (item,idx)=>{
item.setState(...)
});
但收到警告:
警告:ReactDOMComponent:不要访问 DOM 节点的 .props;相反,像
render最初那样重新创建道具或直接从该节点读取 DOM 属性/属性(例如,this.refs.box.className)。
所以我改成:
React.Children.forEach(this.refs.tbody.children, (item,idx)=>{
item.setState(...)
});
得到:
未捕获的不变违规:对象作为 React 子级无效(发现:[object HTMLCollection])。如果您打算渲染一组子项,请改用数组或使用 React 附加组件中的 createFragment(object) 包装对象。
所以....无论如何要这样做?
【问题讨论】:
-
你永远不会从另一个组件设置组件的状态。一个组件负责自己的状态,没有其他人负责。您确实需要告诉我们您要解决的问题。这让我觉得这是一个经典的 XY 问题。 meta.stackexchange.com/questions/66377/what-is-the-xy-problem
-
谢谢大卫。实际上,我有一个具有动态子代 (
) 的 。渲染后,我想通过 AJAX 加载数据并更新
的孩子。所以问题是 React.Children.forEach 既不适用于 this.refs.myTable.children 也不适用于 ..myTable.props.children(warning)。
标签: reactjs