为了账号安全,请及时绑定邮箱和手机立即绑定

是否有更好的方法将多个道具传递给n个孩子

是否有更好的方法将多个道具传递给n个孩子

喵喔喔 2021-04-15 18:11:35
目前正在工作一个小组项目,我一直在研究小组编写的代码,我很好奇是否有更好的方法可以将prop传递给n个子组件,这些子组件可以更改顶级App组件的状态。目前,我们有这样的事情:return (  <div>    <header className="navBar">      // NavBar is an example for the question      <NavBar        showSplash={this.state.showSplash}        displayAllSearchResults={this.displayAllSearchResults}        searchBarDisplay={this.state.showCard}        updateResults={this.updateResults}        selectResult={this.selectResult}        searchResults={this.state.searchResults}        showSuggestions={this.state.showSuggestions}      />    </header>    <section className="App">      <article className="mainContent">{card}</article>    </section>    <div className="appBackground" />  </div>);所有这些方法(可能有太多方法)都被传递到NavBar组件本身,而该组件本身是由一个SearchBar组件组成的,该组件也需要传递巨大的块,以便从一开始就改变状态App。这感觉不对,是有一个解决方案或更好的方法来通过所有这些道具了吗?
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

您可以spread像这样使用运算符:


<NavBar  {...this.state} />

它将状态属性作为道具传递给导航栏。


在您的Navbar组件中,您可以从中获取showSplashstate的值props.showSplash


如果要将数据传递到Navbar的子组件中,则可以执行以下操作:


<ChildComponent {...props} /> // if Navbar is a functional component


<ChildComponent {...this.props} /> // if Navbar is a stateful component


查看完整回答
反对 回复 2021-04-22
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

如果希望所有子组件都可以访问数据,则可以选择以下选项:

  • 反应上下文

  • Redux或状态管理库,例如flux等

或者如果您现在正在寻找问题,则可以按照@Abdelkarim EL AMEL的答案进行操作。我建议您看一下上述选项,以及设置可以在应用程序中任何位置访问的全局状态是否可以帮助您不向每个组件都明确。我更愿意为变量使用全局状态,这些变量是通用的,需要由根应用程序的所有子级访问。

例如,用于更改应用程序主题的按钮组件。它更改了根应用程序的状态,并且每个组件都可以访问它。


查看完整回答
反对 回复 2021-04-22
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

我认为这实际上是完全可以的,建议您离开它。

如果您不希望在render方法的返回中看到它的详细信息,则可以将它们全部保留在一个名为navbarprops的对象中,然后将其散布在其中。我仍然更喜欢它!


查看完整回答
反对 回复 2021-04-22
  • 3 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信