如何在 Apollo Local State 中触发 React Hook
Posted
技术标签:
【中文标题】如何在 Apollo Local State 中触发 React Hook【英文标题】:How to trigger React Hook in Apollo Local State 【发布时间】:2020-02-05 02:59:24 【问题描述】:所以...我在我的 React 应用程序中使用 Apollo 进行本地状态管理。我也在使用react-cookie
(它在内部依赖于反应钩子)。
我想做一些非常基本的事情:
const logout = async (_, args, cache) =>
const cookies = new Cookies()
cookies.removeCookie (`auth`)
cache.writeData (data: isAuthenticated: false)
问题是因为我在组件之外执行此操作,所以我不能使用 useCookies
,因此我的组件永远不会得到它已被删除的更新。
想法?
我真的不想在将我的状态逻辑放入解析器和使用 React 钩子之间做出选择。我猜同样的事情也适用于 redux。
干杯!
【问题讨论】:
【参考方案1】:在 cookie 和组件状态 (which is what this library does) 中复制相同状态的唯一好处是反应性 - 如果 cookie 发生更改,这样做将允许您的组件自动更新。如果您不需要该功能,最好只使用一些不使用 React 特定功能的库,例如 js-cookie。即使您需要监听 cookie 的变化,您也可以使用 universal-cookie 之类的库(react-cookie
在后台使用的库)来完成此操作。
如果您一心想要使用react-cookie
,那么您的logout
突变将只需要更新本地状态,并且您需要将组合逻辑提取到单独的挂钩中。比如:
function useLogout = () =>
const [updateLocalState] = useMutation(LOGOUT_MUTATION)
const [removeCookie] = useCookies(['auth'])
return async () =>
await updateLocalState()
removeCookie()
【讨论】:
以上是关于如何在 Apollo Local State 中触发 React Hook的主要内容,如果未能解决你的问题,请参考以下文章
apollo-link-state 以及如何访问本地状态/缓存?
GitLab CI 如何在 Maven 多模块项目中触发子模块的管道
Apollo 似乎刷新了,当 state 映射到 props 时,我该如何防止呢?