2017-10-01 10 views
0

dispatchアクションが終了するとすぐに何かをしようとしています。同様の質問で.thenを使用しようとしました。私はthis.props.dispatch().then is not a function、それが存在しないというエラーが表示されます。this.props.dispatch()。次に関数ではありません

export function unpackStore(redux_store, namespace) { 
    // namespace is determined by what name you gave each reducer in combineReducers; client/reducers/index.js 
    let final_props = {}; 
    let KEYS = Object.keys(redux_store[namespace]); 
    for (let key of KEYS) { 
     final_props[key] = redux_store[namespace][key]; 
    } 
    return final_props; 
} 

export function basicUnpackStoreClosure(namespace) { 
    return function(store) { 
     let props = unpackStore(store, namespace); 
     return props; 
    } 
} 



@connect(basicUnpackStoreClosure('login_info')) 
export default class LoginPage extends MyComponent { 

    constructor(props) { 
     let custom_methods = [ 
      'handleLoginOrRegisterToggle', 
      'handleOnKeyDownInInputs', 
      'onLoginSubmit', 
      'onRegisterSubmit', 
     ] 
     super(props, custom_methods); 
     this.state = { 
      mode: 'login', 
      email: '', 
      password: '', 
      password_confirm: '' 
     }; 
     if (props.mode == 'register') { 
      this.state.mode = 'register'; 
     } 

    } 

    onLoginSubmit() { 

     let self = this; 

     let reroute = function() { 
      browserHistory.push(self.props.destination_url); 
     } 

     this.props.dispatch({type: 'LOG_IN', payload: "[email protected]"}) 
      .then((response) => { 
       browserHistory.push(self.props.destination_url); 
      }) 
    } 

我々はまた、第二引数として渡す、this.setState仕上げあなたが何かをする方法を試してみました:働い

this.props.dispatch({type: 'LOG_IN', payload: "[email protected]"}, reroute) 

でもありません。 this.props.dispatchは、@connectデコレータを使用して無料で来ているようです。このreduxストアが "LOG_IN"アクションで更新された後でのみ、何かを実行できますか?ありがとう

+0

あなたの質問は、ディスパッチコールから「約束」を得る方法です。 – IzumiSy

答えて

1

通常、接続HOCはコンポーネントとアクションをバインドするために使用されます。たとえば、あなたがこれを行う

export default connect(mapStateToProps, mapDispatchToProps)(ApplicationContainer); 

後、then this.props.getApplicationsgetApplicationsはあなたが解雇する必要があるアクションがどこにあるバインドされます。

あなたのコメントによると、this.props.dispatchのバインディングアクション以外にアクセスする場合は、マッパーを渡さずにconnect()を呼び出すだけで、デフォルトの動作でディスパッチが挿入されます。

+0

それが役立つかどうかは分かりません。 'ディスパッチ'が注入されていますが、そこにありますが、 '.then(...) 'を呼び出すことはできません。これは私が見た提案です。 ディスパッチがジョブを終了した後、つまり還元ストアが更新された後にコールバックを実行したい – codyc4321

関連する問題