如何更改reactjs中外部/独立组件的状态或属性
How change state or property of an outer / separate component in reactjs?
当前DOM树类似于:
<comp1>
<div>
<comp2></comp2>
<comp3>
<comp4 />
<comp4 />
.........
.........
.........
</comp3>
</div>
<comp5></comp5>
</comp1>
组件5,即是我的模态。我想通过上的onclick事件来设置它的状态和道具
我的目标是根据选择在模态上显示详细数据。因此,我需要相应地设置模态组件的状态和道具。在目前的结构中,我如何做到这一点?
对于小页面来说,老式的方法是将所有状态移动到根节点(comp1
)中,这很好。其他组件变成无状态。根节点将要渲染的属性传递给其子节点,同时传递变异属性所需的setter。例如,comp5
得到一个属性username
,它只是comp1.state.username
的值,加上一个属性setUsername
,它是一个采用username
字符串参数的函数,其中comp1
使用setState
更新其状态的username
。通过这种方式,comp5
可以渲染和更新用户名,并且其他组件知道更改(setState
触发子级的渲染)。
对于更复杂的应用程序,将所有这些属性传递给子级会变得乏味,您可以使用flux
和redux
这样的框架。
我认为标准的方法是这样的
在您的反应组件中:
constructor(props) {
...
this.state = {selectedComp4: null
...
}
}
...
handleSelectedComp4Change (yourData) {
this.setState({selectedComp4: yourData})
}
...
render() {
...
return (
<comp1>
<div>
<comp2></comp2>
<comp3>
<comp4 onSelectedComp4Change = {this.handleSelectedComp4Change}/>
<comp4 onSelectedComp4Change = {this.handleSelectedComp4Change}/>
...
</comp3>
</div>
<comp5 SelectedComp4={this.state.selectedComp4}></comp5>
</comp1>
)
}
在comp4中发送您的数据:onClick={() => { this.props.onSelectedComp4Change(someData) }}
在comp5中使用this.props.SelectedComp4
中的数据
编辑:
就像@Valéry所说的
相关文章:
- 从组件状态的数组中删除元素
- Reactjs:在修改对象之前,是否需要复制处于组件状态的对象
- 在Redux中使用组件状态是反模式的吗
- 如何处理需要子组件状态的Meteor数据
- 单击按钮更改组件状态
- 当登录状态为组件状态时,如何使用react路由器实现依赖登录的路径
- 我是否必须在 React 中使用 this.state 来维护组件状态
- 如何使用react路由器将顶级组件状态传递给Routes
- React组件状态与道具动态输入
- 在子组件之间共享父组件状态'州
- 当父组件状态改变时,如何强制子组件重新呈现
- 有条件地绑定组件状态
- js:创建一个多选择组件.选项组件状态的组合流不输出改变的状态
- 从props中初始化组件状态
- 为什么不将redux存储状态存储在本地组件状态中呢?
- 将Facebook Web SDK与ReactJS组件状态集成
- 当从父组件状态传递时,React prop没有在正确的时间更新
- 如何将包含组件'状态的值传递回父组件
- 检查事件函数中的组件状态是否有效
- 当值被分配给组件状态时,为什么console.log打印之前的状态