javascript - 将 props 传递给 Children of Children(嵌套组件树)
问题描述
我不确定这是否可能,但这是我想在 Reactjs 中实现的目标:
<Comp1>
<Comp2 />
<Comp3>
<Comp4 />
</Comp3>
</Comp1>
所以我想做的是,我想使用React.cloneElement APIComp1
将一个 prop 从一个组件注入到另一个组件。这样,如果我想将一个道具或一组道具传播到可能是层次结构中第 6 级的孩子,我应该能够做到这一点。Comp4
但到目前为止我设法实现的是,道具被注入到直接的孩子身上,而不是孩子的孩子身上。
这是我的努力:https ://codesandbox.io/s/x2q06l5z64
我想我已经把问题说清楚了,如果有混淆,你可以问它。
解决方案
这是 react 的context API的一个经典用例。
const MyContext = React.createContext('');
class Parent extends React.Component {
render() {
const { message } = this.props;
return (
<MyContext.Provider value={message}>
{this.props.children}
</MyContext.Provider>
)
}
}
class Child extends React.Component {
render() {
return (
<MyContext.Consumer>
{(message) => (
<div style={{ border: '1px solid #ccc' }}>
<h3>Child</h3>
{message}
</div>
)}
</MyContext.Consumer>
)
}
}
class App extends React.Component {
state = { message: 'default message' }
handleChange = ({ target }) => this.setState({ message: target.value })
render() {
const { message } = this.state;
return (
<div className="App">
<input value={message} onChange={this.handleChange} />
<Parent message={message}>
<div className="some-child">
<div className="some-child">
<div className="some-child">
<div className="some-child">
<Child />
</div>
</div>
</div>
</div>
</Parent>
</div>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"/>
推荐阅读
- wordpress - 从 Wordpress、Woocommerce 添加类别页面中的正常选择创建 Select2
- web-services - 以 RESTful 方式调用轴 2 Web 服务时出现名称空间不匹配错误
- css - 将 nonce 添加到样式内联
- android - Android Navigation - 从托管片段中获取 navhostfragment
- reactjs - 将样式化 Material UI 组件的类型设置为与原始组件相同
- excel - Excel VBS 组合框没有空行
- python - 将参数传递给 QWidget.mousePressEvent
- python - Flask SQLAlchemy 按一到多过滤
- c# - 可以在 Xamarin.Forms 上的按钮上保存对象吗?
- java - 与 Postgresql 相比,H2 数据库有何不同?H2在微服务中使用时会自己创建表吗