【问题标题】:Best practice for Redux actions based on current store基于当前存储的 Redux 操作最佳实践
【发布时间】:2017-11-21 19:43:19
【问题描述】:

我正在尝试根据 Redux 存储中的当前状态来确定调度操作的建议是什么,但没有成功。

我有一个设置,在登录时,当前用户的 ID 存储在 auth.currentUser 下。

我还有单独存储在users[id]下的用户详细信息。

首先,如果用户详细信息已经可用,我希望我的loadUser(id) 操作创建者不要费心进行 API 调用。其次,我想要一个 loadCurrentUser() 操作创建者,它可以根据存储的当前用户 ID 进行调用以获取用户。

这样做的最佳方法是什么?我知道我可以使用 redux thunk 相对轻松地做到这一点,但这是最好的还是有更好的方法?到目前为止,我一直避免使用它——使用 redux promise 中间件代替我的异步操作。

编辑:澄清我想要做什么。

当我的组件加载时,它需要确保加载了当前的用户详细信息。它将通过在loadCurrentUser() 中进行接线来完成此操作。

首先,此操作需要根据存储在商店其他地方的 ID 加载用户。其次,只有当具有该 ID 的用户尚未在商店中时,它才需要这样做。

【问题讨论】:

  • 如果我没记错的话,action creator 用于在 store 中存储数据,而不是从 store 中获取数据。
  • 你在问如何进行异步调用吗?这个问题我不是很清楚。

标签: javascript redux redux-thunk redux-store


【解决方案1】:

将商店的一部分用于保存用户数据并将其连接到任何相关组件。从那里,您可以根据用户的状态进行调度呼叫。生命周期方法是放置这样逻辑的常见位置。

componentWillMount() {
  if (this.props.user.id){ //assuming id is undefined if no user
    this.props.dispatchAction()
  }
}

【讨论】:

  • 所以,为了确保我理解正确: * 将当前用户 ID 连接到组件 * 将基于当前用户 ID 的用户详细信息连接到组件 * 在调度程序中连接以加载用户按 ID * 执行使用哪个 ID 以及是否在组件中加载用户的逻辑。我可以看到它有效,但感觉该逻辑属于 Redux 操作,而不是 UI 组件,确定吗?
  • @Graham 如果您在 Redux 操作中执行此操作,您将失去 React 生命周期的功能和灵活性。当您使用生命周期时,控制何时调度您的操作是一个非常简单的过程。最终,有许多实现可以解决您的一般问题。这只是我的。
猜你喜欢
  • 2017-08-15
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2010-11-08
  • 1970-01-01
  • 2015-09-09
相关资源
最近更新 更多