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