【发布时间】:2014-04-10 16:24:07
【问题描述】:
React 组件包含子组件的标准方法是在 render 方法中创建它们并设置为 children 属性。在我的用例中,可以在渲染父级之前创建子级并通过父级的属性传入。
子中的事件按预期冒泡到父容器,但对父容器的更改不会重新渲染以这种方式创建的子容器。 The docs 表示父关系和所有者关系之间存在差异,后者仅针对在渲染中创建的组件建立,所以我的猜测是这种关系缺失并且对于级联重新渲染很重要。
这是一个简单的例子 (fiddle)
/** @jsx React.DOM */
globalState = 'initial state';
var Child = React.createClass({
render: function() {
return React.DOM.input({
value:globalState
});
}
});
var Parent = React.createClass({
handleChange: function(e) {
globalState = e.target.value;
this.forceUpdate();
},
render: function() {
return React.DOM.div({
children: [
Child(),
React.DOM.br(),
this.props.passedChild
],
onChange: this.handleChange
});
}
});
c = Child();
p = Parent({passedChild:c});
React.renderComponent(p, document.body);
在这个例子中,两个子输入都可以被编辑,onChange 事件被父捕获并调用 forceUpdate()。这确实会级联到在渲染方法中创建的第一个孩子,但不会级联到在其他地方创建并传入的第二个孩子。
如何更新子组件的所有者,以便它根据需要进行更新?
我的备用计划是在子组件上连接一个事件监听器。在我的应用程序中,当创建组件时有相当多的逻辑,这使得在 render() 中执行所有操作变得不切实际。
【问题讨论】:
标签: reactjs