代码之家  ›  专栏  ›  技术社区  ›  0xC0DED00D

使用Context API与CloneElement为直接后代传递道具

  •  3
  • 0xC0DED00D  · 技术社区  · 6 年前

    所以,我有两个组件,一个总是另一个的直接后代。我想把道具从父组件传递给子组件。可能有多个子组件。有两种方法可以实现。

    React.Children.map(children, (child) =>
      React.cloneElement(child, { someProp: 'value' })
    )
    

    或者使用上下文API

    <Context.Provider value={{ someProp: 'value' }}>
      {this.props.children}
    </Context.Provider>
    

    那么,哪一个更注重性能并值得推荐呢。我找不到与这个比较有关的任何讨论,因此在这里提问。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Estus Flask    6 年前

    上下文API的使用对于将数据传递给直接后代来说似乎有些过分。

    如果孩子知道数据将从父母那里传递(这是通过使用 <Context.Consumer>

    <Parent>{passedProps => <Child {...passedProps}/>}</Parent>
    

    {children({ someProp: 'value' })};
    
        2
  •  0
  •   Waleed Arshad    6 年前

    新的contextapi非常有趣,它帮助我们处理道具钻取,并使渲染道具模式的使用更加清晰,但是由于不必要的重新渲染,它会带来一些性能问题。事实上,这不是一个问题,因为API提供了一种处理这种不必要的重新呈现的方法。 see link if this helps optimizing-performance-in-context api