Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何外包使用state和do setState的函数_Javascript_Reactjs_Design Patterns - Fatal编程技术网

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,我有点不确定如何处理