Как вызвать React Hook в Аполлоне - PullRequest
0 голосов
/ 07 октября 2019

Итак ... Я использую Apollo для локального управления состоянием в своем приложении React. Я также использую react-cookie (который использует внутреннюю реакцию).

Я хотел бы сделать что-то довольно простое:

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

Проблема в том, что я делаю этовне компонента я не могу использовать useCookies и, следовательно, мои компоненты никогда не получат обновление, которое было удалено.

Мысли?

Я действительно не хочу выбирать междуположить мою логику состояния в распознаватель и использовать перехватчики React. И я предполагаю, что то же самое применимо к редуксу.

Приветствия!

1 Ответ

1 голос
/ 07 октября 2019

Единственным преимуществом дублирования одного и того же состояния как для файлов cookie, так и для состояния компонента (, что и делает эта библиотека ), является реактивность - это позволит вашим компонентам автоматически обновляться, если файлы 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()
  }  
}
...