2016-07-20 14 views
2

私は自分のアプリ状態を管理するためにReduxを使用していますが、redux-thunkで非同期アクションを実行しました。ディスパッチなしでredux-thunkアクションを実行

export const login = credentials => dispatch => { 
    return doLogin(credentials).then(token => { 
     localStorage.setItem('token', token) 
     // this dispatch call was there before, but now it has gone, 
     // because it is not necessary anymore 
     // dispatch({ type: LOGIN_SUCCESS }) 
    }) 
} 

事は、今、私が店に任意のアクションをディスパッチしないアクションは、単にログインして保存するトークンについてその仕事をしていることです。

このような行動を取っても大丈夫ですか?私はこのコードについてとても自信を持っているわけではありませんが、それをより良くする方法はわかりません。

+0

この機能は状態をまったく実行しませんか? –

答えて

1

あなたは厳しいルールを持っていないものについて意見を求めていますが、大まかに言うと、アクションはアプリケーションで起こったことの最小限の記述でなければなりません。

一般的に、この動作の回避策は回避策ですが、この場合は、リデューサを介してRedux状態に影響を与えないにもかかわらず、(サンク)ミドルウェアが副作用を実行し、ミドルウェアがアクションに応答するように設計されています。

あなたはそれだけで終わりにまだdispatch({ type: 'LOGIN_REQUEST' })開始時とdispatch({ type: 'LOGIN_SUCCESS'})をお勧めかもしれませんが、減速によって消費されていない「上流」アクションが下流本当に、重要ではありませんトリガしているという事実下流のアプリケーションには、後で何かをしたい場合に何が起こっているのかを知る方法があります。

1

味の問題ですが、個人的には、自分のアクションクリエイターとそのエフェクト(ローカルストレージに設定されているアイテム)を強く結びつけることはありません。

代わりに、私はアクションを送ります。データとして渡されたトークンを含むLOGIN_SUCCESS。次に、そのアクションタイプを処理するミドルウェアを用意します。つまり、ローカルストレージにトークンを設定します。

こうすることで、doLoginから返された資格情報をどのように処理するかという点で柔軟性が増えます。あなたは、それぞれのソフトウェアのこのパラダイムを追求して、自分自身のことを行い、最良のことをするべきです。したがって、ユーザーを認証して、認証トークンを処理する方法を最もよく知っている別の部分に認証トークンを渡す機能があります。

+0

ミドルウェアについてはおそらく正しいでしょう。しかしlocalStorageはその機能のためだけに使用されているので、私はこのケースのためにミドルウェアを追加するのはオーバーヘッドになると思った。 –

+0

私はそうだと思いますが、まだ分かれている心配はより簡単です。全体的に - それは選択の問題です。 – WTK

関連する問題