2016-06-25 28 views
0

異なる関数でsetState()を使用する必要があります。要点は、現在の状態や用途に応じて、同じ状態属性( 'test'、 'options')を異なる値で操作し、他の内部関数(this.doSomething())を呼び出します。 問題はfunction1()にあり、私はすべての機能を次々に呼び出します。 function3()にある'this.state.test' === '2'の条件が厳しいことをどうすれば保証できますか?異なる関数呼び出しの中でsetState()を呼び出す

私は、非同期のsetState()があり、コールバック関数がありますが、私の設定のような複数の関数を持つときにこのコールバックを使用するにはどうすればよいですか?私は、あなたがフィニッシュに約束やコールバックを使用することができます

種類が

function1() { 
    ... 
    this.function2(); 
    this.function3(); 
    this.function4(); 
    ... 
} 

function2() { 
    this.doSomething(); 
    this.setState({ 
    options: 'abc', 
    test: '2' 
    }); 
    ... 
} 

function3() { 
    this.doSomethingElse(); 
    if (this.state.test === '2') { 
    this.setState({ 
     options: 'def' 
     test: '3' 
    }); 
    } 
    ... 
} 

function4() { 
    this.doAnything(); 
    this.setState({ 
    options: 'xyz', 
    test: '4' 
    }); 
    ... 
} 
+0

は、あなたが() '関数2('のようにはfunction1 'に約束を持つ関数2、3と4をカスケード接続してみてください可能性がある)、その後(関数3)。。 then(function4) ' – Redu

答えて

0

について...任意の「コールバック地獄」を使用しないと、これを達成するための任意のエレガントな方法があるかどうかを知りたいです。 (ES6で)コールバックと

例:

function1() { 
    ... 
    this.function2(() => this.function3(() => this.function4())); 
    ... 
} 

function2(callback) { 
    this.doSomething(); 
    this.setState({ 
    options: 'abc', 
    test: '2' 
    }, callback); 
    ... 
} 

function3(callback) { 
    this.doSomethingElse(); 
    if (this.state.test === '2') { 
    this.setState({ 
     options: 'def' 
     test: '3' 
    }, callback); 
    } 
    ... 
} 

function4(callback) { 
    this.doAnything(); 
    this.setState({ 
    options: 'xyz', 
    test: '4' 
    }, callback); 
    ... 
} 
+0

ありがとうございます。試してみましょう! – user3649616

+0

ところで:コールバック関数を使用してくれました。しかし、私は@reduという約束のアイデアに苦しんでいます。 anyonyはReactのsetState()でES6の約束のための実例を持っていますか?私はこのオープンスレッドhttps://github.com/facebook/react/issues/2642を見つけました。 – user3649616

関連する問題