如何在 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 以及如何访问本地状态/缓存?

如何在 apollo-link-state 中标准化状态?

GitLab CI 如何在 Maven 多模块项目中触发子模块的管道

Apollo 似乎刷新了,当 state 映射到 props 时,我该如何防止呢?

当选中父级时,如何在Kendo TreeView中触发子节点的onCheck事件

无法在 Apollo GraphQL 的查询中使用 @client @export 变量