javascript - 将 props 传递给 Children of Children(嵌套组件树)

标签 javascript reactjs

我不确定这是否可行,但这是我想在 Reactjs 中实现的目标:

<Comp1>
  <Comp2 />
  <Comp3>
    <Comp4 />
  </Comp3>
</Comp1>

所以我想做的是,我想使用 React.cloneElement APIComp1 组件的 prop 注入(inject)到 Comp4 组件中. 这样,如果我想将一个 prop 或一组 prop 传播给层次结构中第 6 级以下的 child ,我应该能够做到这一点。

但到目前为止我设法实现的是, Prop 被注入(inject)到直接的 child 而不是 child 的 child 。

这是我为此付出的努力: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"/>

关于javascript - 将 props 传递给 Children of Children(嵌套组件树),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53763638/

相关文章:

javascript - 在组件外部使用 redux 钩子(Hook)来实现代码的可重用性

javascript - 为什么 grunt-contrib-imagemin 将 PNG 减少 80%,但 JPG 仅减少 <0.1%?

javascript - 如果 ['Name' ] 超过 15 个字符,更改字体大小

javascript - 在 Firefox 中禁用滚轮更改数字和日期输入

reactjs - 即使数据没有改变,我也可以使用 setState 强制重新渲染吗?我的 GUI 不会更新?

reactjs - 使用 React Hooks 时如何替换 this.setState?

javascript - Angular JS - 评估时机

javascript - 如何通过 javascript 更改 html5 视频的 src 而不会崩溃 chrome 或泄漏内存?

coffeescript - ReactJS:如何访问子组件的引用?

reactjs - 无法在 gatsby 入门博客中查询类型 "frontmatter"上的字段 "MarkdownRemark"