如何创建一个接受任意对象的setState包装器

时间:2019-06-17 19:35:58

标签: javascript reactjs methods arguments

我正在使用REACT中的setState方法,并且代码中几乎每个setState调用都类似于以下内容:

this.setState({..some_stuff...}, ()=> some_standard_method(this.state)); 

这自然暗示着,如果我有一种形式的方法

customSetState(args) {
    this.setState(args, () => some_standard_method(this.state));

}

然后,通过将下面的每个setState调用替换为下面的代码,可以使代码的详细程度降低很多

customSetState(...some_stuff...).bind(this)

但是我不确定如何编写此方法。我的意思是,setState方法不完全采用单个变量,而是指定了任意参数的任意对象。所以在这一行:

customSetState(args) { ...

我是否需要对输入变量“ args”进行任何更改以表明我正在接受任意定义的对象?

1 个答案:

答案 0 :(得分:0)

这是一个简单的示例,说明如何使用散布运算符和rest参数实现该目标:

function setStateSimulation(...args) {
    console.log(`My three parameters are ${args[0]}, ${args[1]} and ${args[2]}`);
    const callback = args[args.length - 1];
    callback();
}

function myCustomSetStateSimulation(...args) {
    setStateSimulation(...args, () => {
        console.log('My custom callback');
    });

}

myCustomSetStateSimulation("a", "B", "c");