Реагирует. js проблемы с повторным рендерингом при попытке показать уведомления в контексте из Apollo useQuery - PullRequest
0 голосов
/ 15 января 2020

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

Моя проблема сейчас заключается в том, что я использую ловушки Apollo для выполнения запроса useQuery, и когда возникает ошибка, я хочу показать ее в моих глобальных уведомлениях.

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

Это вызывает изменение состояния на глобальный контекст уведомления, который запускает повторное рендеринг, который снова запускает useQuery. Все это вызывает бесконечное повторное рендеринг, если вы каждый раз получаете сообщение об ошибке.

Есть ли у кого-нибудь предложение создать глобальную систему уведомлений, которая могла бы работать для этого?

Единственное решение, которое я оставил это импортировать уведомление на каждой странице, где мне нужно уведомление.

Код:

  const [state, dispatch] = useContext(NotificationsContext);
  const { loading, error, data } = useQuery(GET_USERS);

  useEffect(() => {
    if (error) {
      dispatch({
        type: 'ERROR',
        payload: {
          title: 'Query Error',
          subtitle: error.message,
        },
      });
    }

    if (!loading && data) {
      const newData = [];
      data.getUsers.users.forEach((user) => {
        const newUserRow = {};
        headers.forEach((header) => newUserRow[header] = user[header]);
        newData.push(newUserRow);
      });
      setRows(newData);
    }
  }, []);

1 Ответ

0 голосов
/ 15 января 2020

Я думаю, что вы используете функциональный компонент, и вы можете решить эту проблему, используя useQuery внутри хука useEffect, также не забудьте передать пустой массив в качестве второго аргумента useEffect.

Hope это решит вашу проблему.

https://medium.com/@felippenardi / How-to-Do-ComponentDidmount-с-реагировать-крючки-553ba39d1571

...