私はアクション内getState
を使用することが許容であるか否かについては(私には、あるいは単に混乱)、ここで他の質問で回答が相反する見ている、と私はそれがアンチパターンと呼ばれているかなりの数回を見てきました。私にとっては、うまくいくようですが、getState
を使用しない場合は、これを行うためのベストプラクティスは何ですか?Redux Thunkの良い習慣でgetStateを使用していますか?
私はgetState
をサンクの中で使用しています。現在、いくつかの模擬データに接続され、アプリケーションの状態に引き込まれているユーザーの配列をフィルタリングします。ここで
は、自分の行動のためのコードです:
export const accountLogInSuccess = user => ({
type: types.ACCOUNT_LOG_IN_SUCCESS,
user,
});
export const accountLogOutSuccess =() => ({
type: types.ACCOUNT_LOG_OUT_SUCCESS,
});
export const accountCheckSuccess =() => ({
type: types.ACCOUNT_CHECK_SUCCESS,
});
export const accountCheck =() => (
(dispatch, getState) => {
dispatch(ajaxCallBegin());
return apiAccount.accountCheck().then((account) => {
if (account) {
const user = findByUID(getState().users, account.uid);
dispatch(accountLogInSuccess(user));
toastr.success(`Welcome ${user.nameFirst}!`);
} else {
dispatch(accountLogOutSuccess());
}
dispatch(accountCheckSuccess());
}).catch((error) => {
dispatch(ajaxCallError(error));
toastr.error(error.message);
throw (error);
});
}
);
そして、私の減速:
export default function reducerAccount(state = initial.account, action) {
switch (action.type) {
case types.ACCOUNT_LOG_IN_SUCCESS:
return Object.assign({}, state, action.user, {
authenticated: true,
});
case types.ACCOUNT_LOG_OUT_SUCCESS:
return Object.assign({}, {
authenticated: false,
});
case types.ACCOUNT_CHECK_SUCCESS:
return Object.assign({}, state, {
initialized: true,
});
default:
return state;
}
}
私の減速に使用するアカウントの初期状態はちょうどです:
account: {
initialized: false,
authenticated: false,
},
accountCheck
アクションがユーザを通過する(getState
と減速はObject.assign
を介して、アカウントの現在の状態にその値を加算accountLogInSuccess
に機能)。
私のアプリケーションのルートでユーザーを取得し、それを小道具で渡す必要はありません。これをRedux内で達成し、ユーザーデータを状態で利用できるようにするにはどうすればよいですか?繰り返しになりますが、サンクの中でgetState
を使用することはこれまでのところ素晴らしいことですが、アンチパターンとは見なされない優れた解決策がありますか?