在Redux Thunk中使用getState是否是一种良好的实践?

在Redux Thunk中使用getState是否是一种良好的实践?,redux,redux-thunk,getstate,Redux,Redux Thunk,Getstate,我在其他问题中看到了相互矛盾(或让我感到困惑)的答案,这些问题涉及在动作中使用getState是否可以接受,我也看到过很多次它被称为反模式。对我来说,这似乎很有效,但如果我们不使用getState,那么这样做的最佳实践是什么 我在thunk中使用getState过滤当前连接到某个模拟数据并被拉入应用程序状态的用户数组 以下是我的操作代码: export const accountLogInSuccess = user => ({ type: types.ACCOUNT_LOG_IN

我在其他问题中看到了相互矛盾(或让我感到困惑)的答案,这些问题涉及在动作中使用
getState
是否可以接受,我也看到过很多次它被称为反模式。对我来说,这似乎很有效,但如果我们不使用
getState
,那么这样做的最佳实践是什么

我在thunk中使用
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;
    }
}
my reducer中使用的帐户的初始状态为:

account: {
    initialized: false,
    authenticated: false,
},
accountCheck
操作将用户(使用
getState
findByUID
函数找到)传递到
accountloginsucess
中,其中减速机通过
Object.assign将其值添加到帐户的当前状态


不必让用户在我的应用程序的根目录下,然后通过道具将其传递下去,在Redux中实现这一点并使用户数据在状态下可用的最佳实践是什么?同样,到目前为止,在thunk中使用
getState
对我来说非常有效,但是有没有更好的解决方案不被认为是反模式的呢?

我写了一篇名为的扩展博客文章,详细阐述了这个主题。在这篇文章中,我回应了对thunks和使用
getState
(包括Dan Abramov在中的评论)的一些批评。事实上,我的帖子特别受到了像你这样的问题的启发


作为TL;我的博文博士:我相信thunks是在Redux应用程序中使用的一个完全可行的工具,并鼓励它们的使用。虽然在使用thunks和sagas时,以及在其中使用
getState/select
时,有一些值得注意的问题,但这些问题不应该让您害怕使用thunks。

那么在中间件it中使用getState是否是一种不好的做法呢?这个答案似乎回答了使用thunks是否是一个好的做法。不,正如我的博客文章所说,这不是一个坏的做法。酷,把它放在答案中会很好,所以它不是一个只包含链接的答案。这是一个不好的答案,因为内容存在于短暂的链接中。