【发布时间】:2020-12-10 11:27:39
【问题描述】:
我正在使用redux-toolkit 和createAsyncThunk 来处理异步请求。
我有两种异步操作:
-
从 API 服务器获取数据
-
更新 API 服务器上的数据
export const updateData = createAsyncThunk('data/update', async (params) => {
return await sdkClient.update({ params })
})
export const getData = createAsyncThunk('data/request', async () => {
const { data } = await sdkClient.request()
return data
})
然后我将它们添加到extraReducers 中
const slice = createSlice({
name: 'data',
initialState,
reducers: {},
extraReducers: (builder: any) => {
builder.addCase(getData.pending, (state) => {
//...
})
builder.addCase(getData.rejected, (state) => {
//...
})
builder.addCase(
getData.fulfilled,
(state, { payload }: PayloadAction<{ data: any }>) => {
state.data = payload.data
}
)
builder.addCase(updateData.pending, (state) => {
//...
})
builder.addCase(updateData.rejected, (state) => {
//...
})
builder.addCase(updateData.fulfilled, (state) => {
//<--- here I want to dispatch `getData` action to pull the updated data
})
},
})
在我的组件中,我有一个触发更新操作调度的按钮。但是我点击按钮后发现,尽管服务器上的数据正在更新,但页面上的数据并没有同时更新。
function MyComponent() {
const dispatch = useDispatch()
const data = useSelector((state) => state.data)
useEffect(() => {
dispatch(getData())
}, [dispatch])
const handleUpdate = () => {
dispatch(updateData())
}
return (
<div>
<ul>
// data goes in here
</ul>
<button onClick={handleUpdate}>update</button>
</div>
)
}
我在更新数据后尝试在handleUpdate 中添加dispatch(getData())。但是由于异步重击,它不起作用。我想知道我是否可以在updateData 的生命周期操作中调度getData 操作,即
builder.addCase(updateData.fulfilled, (state) => {
dispatch(getData())//<--- here I want to dispatch `getData` action to pull the updated data
})
【问题讨论】:
标签: reactjs redux redux-thunk redux-toolkit