getState
アクション内での使用が許容されるかどうかに関して、ここの他の質問で矛盾する (または単に混乱する) 回答を見てきました。私にとってはうまくいくようですが、使用しない場合、これを行うためのベストプラクティスは何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
渡しfindByUID
ます。accountLogInSuccess
Object.assign
アプリケーションのルートでユーザーを取得し、小道具を介してそれを渡す必要がないことを好むのですが、Redux 内でこれを達成し、ユーザー データを状態で利用できるようにするためのベスト プラクティスは何ですか? 繰り返しgetState
ますが、サンク内での使用はこれまでのところうまく機能していますが、アンチパターンとは見なされない、これに対するより良い解決策はありますか?