gpt4 book ai didi

javascript - Reactjs 如何从不同的组件更改组件的状态

转载 作者:可可西里 更新时间:2023-11-01 02:23:10 24 4
gpt4 key购买 nike

我有一个 React 组件,我们称它为组件 1

define([..., /path/component_2.jsx], function(..., Component2) {
var Component1 = React.createClass({
getInitialState: function() {
return {.......};
},

componentDidMount: function() {
.......
dates = ....;
Component2.setState({dates: dates});
}
render: function() { return (<div ...></div>) }
});
}

如您所见,我正在调用此组件中的 Component2.setState。但是我收到一个错误,比如 setState is not a function。我尝试通过在组件 2 中定义一个自定义函数而不是 setState 函数并从组件 1 调用该函数来尝试此操作,但我遇到了同样的错误,“不是函数”。

和组件 2:

define([..., ], function(...) {
var Component2 = React.createClass({
getInitialState: function() {
return {.......};
},

render: function() { return (<div ...></div>) }
});
}

所以我想在 reactjs 中我们调用一个组件只是为了渲染某些东西(React DOM 元素)?并且不能改变组件状态?

如果是这样,我怎样才能从不是 first 的子组件或父组件的不同组件更改组件的状态?

最佳答案

组件不会公开暴露它们的状态。同样重要的是要记住,状态的范围是组件的实例,而不是它们的定义。

要在组件之间进行通信,您可以推出自己的事件订阅服务。

var events = new EventEmitter();

// inside Component1
events.emit('change-state', newState);

// inside Component2
events.on('change-state', function(state) {
this.setState(state);
});

但是,这很快就会变得难以管理。

一个更明智的解决方案是使用 Flux .它允许您显式管理整个应用程序的状态,并在您的组件中订阅状态的不同位的变化。值得尝试全神贯注。

想要通信的组件应该调度一个 Action ,这个 Action 将负责改变商店中的东西,你的其他组件应该订阅那个商店并可以根据变化更新它的状态。

关于javascript - Reactjs 如何从不同的组件更改组件的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33800759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com