reactjs - 处理反应查询突变和反应上下文时的最佳策略
问题描述
我有点问题。我正在为我网站的一个部分使用反应上下文 api。它是每个选择然后调用反应查询突变的形式(我不必进行突变)。
出现问题是因为当用户进行选择时,它会添加到深度嵌套的上下文状态对象中。所以,我喜欢 3 个动作来更新这个深度嵌套的状态.. 即,输入/复选框/下拉菜单......但是在每个动作之后,我需要触发这个突变,然后用价格更新状态......
我在将此 api(突变)集成到此上下文 api 中时遇到问题 ..任何建议..即..
--- user clicks checkbox
------- update context state inside a deeply nested object
----------- ** Need to fire an api WITH this update state (the whole object) **
--------------- response from API updates this state with an updated price
--- user selects dropdown
------- update context state inside a deeply nested object
----------- ** Need to fire an api WITH this update state (the whole object) **
--------------- response from API updates this state with an updated price
出现的问题是,除非我使用这个“深度嵌套对象”,否则我使用 useEffect 进入组件内部的无限循环,但由于它是嵌套的,它永远不会“更新”......所以它只会触发一次。
您更新上下文 api 状态的策略是什么,然后基于该状态触发一个 API,然后“更新状态”......
解决方案
您更新上下文 api 状态的策略是什么,然后基于该状态触发一个 API,然后“更新状态”......
使用 react-query,您将执行useQuery
并创建一个包含所有客户端状态(复选框状态、下拉选择等)的 queryKey,例如:
const useSomethingQuery = () => {
const userInput = useMyContextValue()
return useQuery(
['something', userInput],
() => fetchSomething(userInput),
{ enabled: !!userInput }
)
}
这里发生了几件事:
- 每次
userInput
from 上下文更改时,queryKey 都会更改,并且 react-query 将在发生这种情况时触发新请求 - 基本上是该查询的
userInput
所有“依赖项” - 可以是深度嵌套的对象,不必是引用稳定的,react-query 将处理 - 只要我们没有查询,查询就会被禁用,
userInput
并且一旦做出第一个选择就会启用。这当然是可选的。 - 您可以在需要数据的任何地方使用该自定义挂钩,因此无需将结果数据放入上下文或任何东西中。
推荐阅读
- angular - 如何根据Angular 6同一行中的其他单元格值在AG-Grid选择下拉列表中加载不同的选项?
- amazon-web-services - 如何将私有现有域迁移到 AWS EC2?
- google-apps-script - 从电子邮件中检索云端硬盘文档的链接
- c# - 分配前的冗余比较和“如果”
- python - 同时运行多个 python 文件并在一个完成后全部终止
- mysql - MySql 选择正确和喜欢
- c++ - 新窗口中的 QOpenGLWidget
- azure - Azure 流量管理器对 TCP/443 探测显示联机,但对 HTTPS/443 探测显示降级
- c++ - 已被破坏的对象数组的析构函数
- java - 如何使删除然后写入数据库的方法具有事务性?