Javascript 如何外包使用state和do setState的函数
我有一个拥有许多函数的类,我希望将这些函数外包,并将每组函数放在它们自己的文件中,然后通过导入和调用它们来使用它们。Javascript 如何外包使用state和do setState的函数,javascript,reactjs,design-patterns,Javascript,Reactjs,Design Patterns,我有一个拥有许多函数的类,我希望将这些函数外包,并将每组函数放在它们自己的文件中,然后通过导入和调用它们来使用它们。 通常这很简单,您只需将函数体放在另一个文件中,然后导出它们,但在我的例子中,我使用this.state和this.setState,是否仍然可以外包这些函数?如果没有,是否有更好的做法? 谢谢。我只是在没有任何测试的情况下很快就完成了,告诉我这是否是你想要的 window._stateManager = new StateManager(); class X extends R
通常这很简单,您只需将函数体放在另一个文件中,然后导出它们,但在我的例子中,我使用
this.state
和this.setState
,是否仍然可以外包这些函数?如果没有,是否有更好的做法?谢谢。我只是在没有任何测试的情况下很快就完成了,告诉我这是否是你想要的
window._stateManager = new StateManager();
class X extends React.Component {
constructor(props) {
super(props);
_stateManager.addStateFunction(this.setState.bind(this));
}
}
class StateManager() {
constructor() {
this.stateFunctions = [];
}
addStateFunction(ss) {
this.stateFunctions.push(ss);
}
updateStates(obj) {
this.stateFunctions.forEach(ss => {
ss((state => {
// here you have access to "this.state" as state
return Object.assign({}, state, obj);
// whatever you return from this function changes the state of the react component
}))
})
}
}
为什么要使用不属于组件或子组件的函数更新状态。这没有道理。如果您想使用redux,则商店中将存储您整个应用程序的单一状态源。所有状态更新逻辑将在reducer中分离,您将有权访问可以更新应用程序状态的action creator 您可以传递类this.setState.bind(this),以便其他类可以在必要时调用该函数。该函数还接受一个函数作为参数,该参数向您传递当前状态,因此您的外部类可以使用该回调模式。从今天起,我不再使用带有React的类,而是使用React挂钩。。。我认为如果你想外包这些功能,它们应该独立于类。他们应该从输入参数计算一些值(状态)并返回它。然后在你的类中使用setState的返回值。谁说它不属于我的组件!,我只是说组件变得太大了,我想通过外包功能使事情变得更简单,但是因为很多组件都使用setState,我有点不确定如何处理