背景
我有使用 redux 和 redux-thunk 的反应应用程序。
试图了解如何编排异步调用。仅当先前调度的动作(API 调用)成功时如何调度动作。
用例
我有EmployeesComponent。该组件有两个虚拟的表示组件
- EmployeesList 基本上列出了员工。
- AddEmployeeForm,这是一种添加新员工的模式。
在渲染EmployeesComponent 时,在useEffect 挂钩中,我调度了一个动作来加载员工。到现在为止还挺好。
当我用户在 AddEmployeeForm 中输入数据并提交表单时,如果 API 调用成功,我想再次实现加载所有员工。
我在理解如何知道我是否可以调度加载所有员工的操作时遇到问题。这是我的提交处理程序的样子。
const handleSubmit = async (e) => {
e.preventDefault();
console.log("Handle submit add new employee..");
const employeeData = inputs;
// Validate data from the AddEmployeeForm
// in case of validation errors, abort
dispatch(addEmployee(employeeData)); // calls API to save the data
// How to await the result of the dispatched action (addEmployee) before continuing?
// If addEmployee was not successful abort
// The error data from the API call is saved in the redux store,
// so the UI gets notified and can display it properly
// If addEmployee was successful, I want to
clearForm(); // local state from the component
handleCloseForm(); // local state from the component
dispatch(loadEmployees());
};
挑战
handleSubmit 中的当前方法对我来说很臭。业务逻辑有点放在 UI 中,并且失去了将 UI 和业务逻辑明确分离的好处。我很难弄清楚要采用什么方法以及如何处理这些用例。
另一个用例示例:
- 派遣登录用户
- 如果登录成功,您会从后端获取令牌
- 如果登录成功,则根据检索到的令牌调度一个操作以加载用户数据