Reactjs 当使用redux时,我可以在容器组件中调用api吗?

Reactjs 当使用redux时,我可以在容器组件中调用api吗?,reactjs,redux,Reactjs,Redux,我最近很困惑。 当我编写redux时,如果我必须调用api,我将执行一个操作来更新reducer,该组件只是从props呈现数据 但最近我看到我的同事只是在容器组件中调用api,然后更新组件状态。 他说,若你们的数据不需要和其他组件共享,你们可以在组件中调用api,这样你们就不必在Action和Reducer中编写太多的代码 我觉得这很方便。例如:如果我有一个功能:当用户单击按钮时,我必须发送电子邮件。 此功能不需要通过reducer更新store,只需提醒“发送成功” 因此,我可以在容器组件中

我最近很困惑。
当我编写redux时,如果我必须调用api,我将执行一个操作来更新reducer,该组件只是从props呈现数据

但最近我看到我的同事只是在容器组件中调用api,然后更新组件状态。
他说,若你们的数据不需要和其他组件共享,你们可以在组件中调用api,这样你们就不必在Action和Reducer中编写太多的代码

我觉得这很方便。例如:如果我有一个功能:当用户单击按钮时,我必须发送电子邮件。
此功能不需要通过reducer更新store,只需提醒“发送成功”

因此,我可以在容器组件中编写以下代码:

async onClick() {
  // 1. call api
  const {error, response} = await sendMail({email: this.state.email});
  if (response){    
    // 2. alert success
    this.setState({
      modal: {
        show: true,
      }
    });
  }
}
但我不知道这是否符合redux的原则。

如果状态不需要与其他组件共享,我可以在组件中直接调用api吗

您可以从已调度的操作或React组件调用api:这是您的选择。此处没有强制性规则,这取决于您希望对组件执行的操作:

何时使用反应状态:

  • 最好让智能组件处理它们自己的状态,因为这样可以简化在外部项目中的集成。拥有使用Redux的组件意味着项目需要添加reducer来使用该组件
  • 如果某个组件处理任何其他组件都不需要的信息,请使用React state。与UI状态相关的信息通常是这样
使用Redux时,会减少:

  • 如果您需要测试组件,请选择Redux,因为您可以在测试组件时将“测试操作”连接到组件
  • 如果您需要通过组件共享一组数据,最好使用Redux来实现信息的交互
如果你想看一看的话,这个问题已经被盖隆处理过了。他解释说:

使用React表示短暂的状态,这种状态对应用程序全局来说并不重要,也不会以复杂的方式发生变化。例如,某个UI元素中的切换,表单输入状态。对于全局重要或以复杂方式变化的状态,使用Redux。例如,缓存的用户或后期草稿。有时,您可能希望从Redux状态转移到React状态(当在Redux中存储某些内容变得不方便时),或者反过来(当更多组件需要访问某些曾经是本地的状态时)。经验法则是:做任何不那么尴尬的事


我建议你看看

我也有类似的问题。随着时间的推移,我逐渐将redux视为“应用程序级”商店。任何组件级别的状态仍然可以存储在组件中。我个人使用redux来存储全局应用程序状态,例如已验证用户、全局应用程序设置、用户设置。。。组件特定状态可以保持在组件级别-在“智能”/“容器”组件中。如果以后需要,这种组件可以很容易地与redux交换(例如,在业务更改后,本地状态变为全局状态)。在容器中添加API调用等副作用会使测试更加困难。这些副作用应该在中间件中处理,如thunk、sagas或Observable。