所以,在React,我们知道我们可以让孩子通过这样的回调与父母沟通:
Child = React.createClass({
render() {
return (
<div>
<button onClick={this.props.onAction.bind(null, this.props.name)}>Child button</button>
</div>
)
}
});
Parent = React.createClass({
handleChildAction(name) {
alert(`Child button ${name} clicked`);
},
render() {
return (
<div>
<Child name="robot1" onAction={this.handleChildAction} />
</div>
)
}
});
但我不清楚如何以这种格式在父母/子女之间进行双向沟通:
Container = React.createClass({
render() {
return (
<Parent>
<Child name="robot1" />
<Child name="robot2" />
</Parent>
)
}
});
如何让Parent
向孩子们发送信息,让Child
发送信息?
答案 0 :(得分:1)
这种情况我通常会尽量避免,但是当父母代表特定类型的孩子的某个容器时,或者应该呈现其他类型的抽象时,它可能是有用的in certain situations。
如果您认为有必要,可以利用Parent
mapping over this.props.children
内的along with React.cloneElement
向他们传递额外的道具。请记住,您应该将this.props.children
视为不透明,并且只能通过React.Children
帮助程序进行迭代。例如:
var Child = React.createClass({
render() {
return (
<div>
<button onClick={this.handleClick}>Child button</button>
</div>
)
},
handleClick(e) {
this.props.onAction(this.props.name);
}
});
var Parent = React.createClass({
handleChildAction(name) {
alert(`Child button ${name} clicked`);
},
render() {
return (
<div>{React.Children.map(this.props.children, this.renderChild)}</div>
)
},
renderChild(child) {
return React.cloneElement(child, {onAction: this.handleChildAction});
}
});
var Container = React.createClass({
render() {
return (
<Parent>
<Child name="robot1" />
<Child name="robot2" />
</Parent>
);
}
});
此处展示了该技术的a working JSBin:https://jsbin.com/mijune/edit?js,output
答案 1 :(得分:0)
你没有提到祖父母。怎么样。
unless s.nil?