如何从一个组件访问另一个组件的状态
How to access one component's state from another component
如何在另一个组件中访问一个组件的状态?下面是我的代码,我正在尝试访问组件b
中组件a
的状态。
var a = React.createClass({
getInitialState: function () {
return {
first: "1"
};
},
render: function () {
// Render HTML here.
}
});
var b = React.createClass({
getInitialState: function () {
return {
second: a.state.first
};
},
render: function () {
// Render HTML here.
}
});
但我什么也没得到。
尝试这样做,访问state
也不是正确的方法。最好有一个父组件,其子组件是a
和b
。ParentComponent
将维护state
并将其作为道具传递给孩子们。
例如
var ParentComponent = React.createClass({
getInitialState : function() {
return {
first: 1,
}
}
changeFirst: function(newValue) {
this.setState({
first: newValue,
});
}
render: function() {
return (
<a first={this.state.first} changeFirst={this.changeFirst.bind(this)} />
<b first={this.state.first} changeFirst={this.changeFirst.bind(this)} />
)
}
}
现在在您的孩子组合a
和b
中,使用 this.props.first
访问first
变量。当您希望更改first
调用的值时this.props.changeFirst()
ParentComponent
函数。这将更改值,从而反映在子项a
和b
中。
我在这里a
编写组件,b
类似:
var a = React.createClass({
render: function() {
var first = this.props.first; // access first anywhere using this.props.first in child
// render JSX
}
}
如果两个组件需要访问同一状态,它们应该有一个保存状态的共同祖先。
所以组件 A 是 B 和 C 的父级。组件 A 具有状态,并将其作为道具传递给 B 和 C。如果你想从 B 更改状态,你可以传递一个回调函数作为道具。
我建议你使用像Redux(个人收藏夹),MobX反流等状态管理器来管理你的状态。
这些工作原理是,它们允许您将所有共享状态包含在一个状态存储(称为存储)中,并且任何组件都需要访问该共享状态的一部分,它只会从存储中获取它。
这看起来很难开始,但是一旦你克服了小挑战,就把2或3个"wtf"排除在外。它变得更容易。
看看这里: http://redux.js.org/
编辑:Redux很好,但样板代码真的是一个关闭... 对于那些寻找更简单,更神奇(这可能是好事也可能坏事)解决方案的人,请使用mobx:https://mobx.js.org/
子组件中创建设置状态的函数:
changeTheState(){
this.setState({something:"some value"})
}
并在父组件中为子组件提供一个引用,如下所示:
<Child ref={component => this._child = component}/>
然后在父级中创建一个函数来访问 changeTheState()
parentFunction(){
this._child.changeTheState();
}
并且只需使用父函数。
如果你有 A 和 B 组件,其中 B 是 A 的子组件,你可以传递一个函数来更改 A 的状态,通过 props 到 B。
function B(props) {
return <button onClick={props.changeA} />
}
class A extends React.Component {
//constructor
//pass this function to B to change A's state
handleA() {
this.setState({});
}
render() {
return <B changeA={() => this.handleA()} />
}
}
看看 React Context
上下文提供了一种通过组件树传递数据的方法,而不必在每个级别手动传递 props。
如果需要,您还可以从嵌套组件更新上下文。
- 从vuejs中的组件模板访问父方法
- 回流:让多个组件访问同一个Store
- 访问vue组件中的ID标记
- Angular 2-如何从ControlGroup访问子组件
- 如何从Vue.js中的子组件访问父方法
- 访问Vuejs组件内部的元素
- 访问要在 React Native Text 组件中显示的对象数组
- 如何从一个组件访问另一个组件的状态
- 对自定义组件中的本地访问引用进行反应
- 动态添加子组件值时,如何从父组件访问这些值
- 如何访问Vue.js中深度嵌套的子组件中的数据
- 每次加载页面时,火狐附加组件访问变量
- React.js:从独立组件访问整个应用程序状态
- Vue.js从子组件访问父/根数据
- 从另一个组件访问函数内的React组件
- ReactJS:从基本组件访问上下文
- 从深度嵌套的组件访问redux分派
- 从子组件访问父组件/属性
- 可以't从子组件访问状态
- 从react组件访问环境变量