可以在动作创建器中使用getState()来获取当前用户的ID

时间:2018-01-25 13:23:01

标签: reactjs redux redux-thunk

我正在使用reduxredux-thunk进行异步操作。

我在这个网站上发现了很多类似的问题,在其他一些博客上也是如此 -  有些人建议不要在动作创建者中使用getState(),因为它是反模式的,另一方面其他人说在某些特定情况下它可以但我仍然无法理解可以在我的特定情况下

我有auth reducer,其中包含userId

这是我的行动创造者:

export const getUserHobbies= () => (dispatch, getState )=> {

    const currentUserId = getState().auth.userId;

    dispatch({
        type: GET_HOBBIES_REQUEST
    });

    return fetch(`api/hobbies/?userId=${currentUserId}`)
        .then (json => { 
           //...
        })
        .catch( e => {
           //...
        })
};

如您所见,我需要当前用户ID来执行AJAX请求,并且我正在使用动作创建器中的getState()检索当前用户ID。可以吗?或者更好地将userId连接到我的组件并将此值传递给组件中的action-creator?

1 个答案:

答案 0 :(得分:-1)

如果您觉得需要从它外部访问组件的内部状态(动作创建者),我认为这种状态应放在Redux商店中。因此,您可以订阅它的更新并将其作为参数传递给action creator(正如@Marko Niciforovic所提到的那样)。

将该状态移至Redux后,您的代码将符合Redux。

编辑(对评论作出反应): 如果您的状态是当前登录用户的ID,我可以想象这些信息将被大量使用。我会考虑使用HTML5会话存储,本地存储这种状态。