0

所以......我在我的 React 应用程序中使用 Apollo 进行本地状态管理。我也在使用react-cookie(它依赖于内部的反应钩子)。

我想做一些非常基本的事情:

const logout = async (_, args, {cache}) => {
  const cookies = new Cookies()
  cookies.removeCookie (`auth`)
  cache.writeData ({data: {isAuthenticated: false}})
}

问题是因为我在组件之外执行此操作,所以我无法使用useCookies,因此我的组件永远不会得到它已被删除的更新。

想法?

我真的不想在将状态逻辑放入解析器和使用 React 钩子之间做出选择。我猜同样的事情也适用于 redux。

干杯!

4

1 回答 1

1

在您的 cookie 和组件状态(这是该库所做的)中复制相同状态的唯一好处是反应性 - 这样做将允许您的组件在 cookie 更改时自动更新。如果您不需要该功能,最好只使用一些不使用 React 特定功能的库,例如js-cookie。即使你需要监听 cookie 的变化,你也可以不使用 hooks 来使用Universal-cookie 之类的库,这是react-cookie在底层使用的。

如果您一心想要使用react-cookie,那么您的logout突变将只需要更新本地状态,并且您需要将组合逻辑提取到单独的钩子中。就像是:

function useLogout = () => {
  const [updateLocalState] = useMutation(LOGOUT_MUTATION)
  const [removeCookie] = useCookies(['auth'])
  return async () => {
    await updateLocalState()
    removeCookie()
  }  
}
于 2019-10-07T19:55:21.497 回答