Есть ли правильный способ использовать объект в качестве зависимости в useEffect? - PullRequest
2 голосов
/ 10 февраля 2020

У меня есть созданный мной обработчик реагирования, который принимает объект запроса.

export function useMyQuery(query: QueryObjectType)
{
    React.useEffect(executeQuery, [ query ]);
    // ...
}

К сожалению, каждый раз, когда мой обработчик вызывается как часть повторного рендеринга, несмотря на то, что query имеет никогда не меняясь и все еще будучи точно таким же объектом, как и раньше, я получаю бесконечное l oop.

. Я могу решить эту проблему, обернув query с JSON.stringify(...), однако я не уверен, что это правильно? Есть ли какой-либо предпочтительный механизм для проверки равенства для объектов при передаче в качестве зависимости useEffect?

1 Ответ

0 голосов
/ 10 февраля 2020

Добавление useState() должно помочь. Вам нужно будет вернуть установщик, чтобы разрешить повторный запрос от родителя.

useState(query) срабатывает только при первом рендере, поэтому _query остается неизменным, пока не будет задано явное значение.

export function useMyQuery(query: QueryObjectType)
{
    const [_query, setQuery] = useState(query);

    React.useEffect(executeQuery, [ _query ]);
    // ...

   return setQuery;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...