2017-03-01 18 views
2

実際に状態を変更せずにレフィックスアクションを実行するにはどうすればよいですか?状態を変更せずにレビュックスアクションに反応する方法

既存のコードをreduxに移植しています。ログアウトボタンをクリックすると、既存の関数logout()がユーザーをログアウトするAJAX要求を行います。その要求が失敗した場合、それが移植されたコードでalert('Logout failed');を呼び出し、ログアウトボタンがredux-thunkを用いて実施されるアクションの作成者を呼び出し:

export function logout(email, pass, callback) { 
    return function(dispatch) { 
    axios.get('/logout') 
     .then(function(response) {dispatch({type: 'LOGOUT_SUCCESS'})}) 
     .catch(function(error) {dispatch({type: 'LOGOUT_FAILURE', message: error.response.data})}); 
    }; 
} 

減速は、LOGOUT_SUCCESSアクションを処理した状態からユーザオブジェクトを削除し、ありますまっすぐ進む。しかし、私は失敗のケースを処理し、alert()を起動する必要がありますか?

  • アクションの作成者はalert()を呼び出すことができますが、どういうわけか、私はこれが
  • 減速がalert()を呼び出し、ちょうど同じ状態を返すことができ、適切な場所ではないことを感じて...しかし、それは悪い考え減速が必要があるためと思われます副作用のない純粋な機能です。
  • 還元剤は{messages: ['Login failed']}のような状態を返す可能性があり、コードの他の部分がこれに反応する可能性があります。警告をスローし、状態からメッセージを削除する別のアクションを呼び出します。しかし、これは不必要に複雑なようです。

イベントを介してアクションをトリガーしたいが、状態を変更したくない場合、アクションクリエーターからそれを外したい場合はどんなパターンが当てはまりますか?

答えて

2

ログインが失敗したときに起こる唯一の事柄がアラートであれば、そこの機能で呼び出すだけです。

反応は単なるJavaScriptであることを忘れないでください。自分をイデオロギーに陥らせないでください。これらのパターンはルールではなくガイドラインです。

redux-sagaをチェックアウトすることができます。これは、還元的副作用をサンクより宣言的に処理します。

関連する問題