我有一个React Redux Toolkit切片,我想:
1.更新我的状态
1.将此更新状态获取到我的后端
我想做这样的事情:
const sendStateToBackend = createAsyncThunk(
'.../sendStateToBackend',
async (state) => {
const data = await ...
}
)
createSlice({
...,
reducers: {
addTodo:(state, action) => {
state.todos.push(action.payload)
dispatch(sendStateToBackend(state)) // This is an Anti pattern???
}
},
extraReducers(builder) {
builder.addCase(sendStateToBackend.pending, (state) => {
state.isLoading = true
}
builder.addCase(sendStateToBackend.fulfilled, (state, action) => {
state.isLoading = false
}
}
})
字符串
在我的页面.tsx:
const onSubmit = async (values) => {
try {
dispatch(addTodo(values))
// Can I trigger another dispatch here?
} catch (error) {
console.error('An error occurred while submitting the form: ', error)
}
}
型
我该如何实现这一点?
1条答案
按热度按时间lxkprmvk1#
您可以使用Redux Toolkit切片的
extraReducers
部分来处理由addTodo
操作触发的API调用。不应该在addTodo
reducer内部分派sendStateToBackend
操作,而应该让extraReducers
在addTodo
操作完成时处理它。以下是如何重构代码:
1-从切片中的
addTodo
reducer中删除分派:字符串
2-在你的page.tsx中,你可以在“onSubmit”函数中按顺序分派这两个动作:
型
当
addTodo
动作被调度时,它将更新Redux存储中的状态。然后,extraReducers
部分将处理sendStateToBackend
操作,当addTodo
操作完成时,调用API将更新的状态发送到后端。通过在onSubmit
函数中使用await
,可以确保在继续执行其余代码之前完成API调用。