redux-toolkit - 请求后更新其他切片
问题描述
使用RTK Query,如何使用获取功能来更新另一个切片的状态?
本质上,我试图让所有相关状态彼此相邻,因此在使用 查询数据后useLazyGetQuery
,我想使用结果并将其存储在现有的切片状态中。
虽然像下面这样的东西适用于组件,但它会使整个代码变得混乱
const [trigger, result, lastArg] = useLazyGetFiltersQuery();
React.useEffect(() => {
if (result.status === 'fulfilled' && result.isSuccess === true && result.isLoading === false) {
dispatch(updateData(result.data.map((pg) => ({ label: pg, value: pg }))));
}
}, [dispatch, result, result.isLoading, result.isSuccess, result.status]);
我宁愿直接在createApi
方法中设置一些逻辑,以便将结果数据从头开始存储在我想要的切片中。
谢谢
解决方案
一般来说,我建议不要从 RTK-Query 复制数据,除非你有充分的理由:你将不得不手写很多东西,这几乎违背了 RTK-Query 的目的,并且你会丢失自动缓存收集之类的东西未使用的缓存条目 - 从那时起,您必须自己做。
此外,该数据已经在 Redux 中。通常,当您可以避免时,您不应该在存储中复制数据。
也就是说,你当然可以做到。例如,在“Using extraReducers”身份验证示例中显示:
const slice = createSlice({
name: 'auth',
initialState: { user: null, token: null } as AuthState,
reducers: {},
extraReducers: (builder) => {
builder.addMatcher(
api.endpoints.login.matchFulfilled,
(state, { payload }) => {
state.token = payload.token
state.user = payload.user
}
)
},
})
请记住:这是 Redux,一切都通过操作发生。您将永远不必将useEffect
其写回状态。只需倾听减速器中的正确操作即可。
推荐阅读
- c# - 使用像大纲步骤这样的背景步骤
- gnuplot - GNUPLOT - 如何检查是否设置了“multiplot”
- c# - Interop.Outlook / UiPath - 有没有办法以异步方式发送电子邮件?
- arduino - 为什么这个 Arduino 代码打印“拒绝访问”
- ios - 快速画一条全宽的虚线?
- php - Magento 2 - 类别属性保存到错误的商店 ID
- typescript - 定义没有 `as` 关键字的具体函数返回类型
- blueprism - 有没有一种方法可以将 10 个数据项添加到 BluePrism 中的集合中?
- amazon-web-services - AWS Sagemaker ClientError:imread 读取文件的空白(无)图像:/opt/ml/input/data/train/image_directory/key_of_first_image.jpg
- python - 从 python 脚本执行直线命令时出现“未找到直线命令”错误(从 oozie shell 操作调用)