Избегайте срабатывания useEffect при изменении одной вложенной зависимости - PullRequest
0 голосов
/ 27 января 2020

Моя форма имеет 3 поля: lambda, period и filterPattern. Когда значения lambda и period изменятся, будет срабатывать handleSearch. Однако я не хочу, чтобы handleSearch запускался при изменении filterPattern.

Если я не введу filterPattern в массив зависимостей, тогда handleSearch не сможет получить последнее значение filterPattern.

Как избежать срабатывания useEffect при изменении одной вложенной зависимости? Спасибо.

const getLogQuery = useCallback(() => ({
  lambda,
  period,
  filterPattern,
}), [lambda, period, filterPattern]);

const handleSearch = useCallback(async () => {
  await getLambdaLogs(getLogQuery());
}, [getLogQuery]);

useEffect(() => {
  handleSearch();
}, [handleSearch]);

const getLambdaLogs = async (query) => {
  const logs = await LambdaService.getLambdaLogs(query);
  setLogItems(logs);
}

1 Ответ

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

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

useEffect(() => {
  handleSearch();
}, [handleSearch]);

Что не имеет никакого смысла, наблюдать за функцией, а затем вызывать эту функцию, если она меняется, изменить ее на

useEffect(() => {
  handleSearch();
}, [lamba, period]);
```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...