Задать вопрос
@lexstile

Как вызвать функцию только после обновления state в useEffect?

Есть код:
const [filters, setFilters] = useState({});

  const filterByRedColor = () => {
    const apiUrl = `/api/?colorId=${filters.colors.red}`;
    callApi(apiUrl);
  };

  useEffect(() => {
    const asyncData = async () => {
      const data = await getFilters();
      setFilters(data);
      filterByRedColor(); // при добавлении 2-го useEffect эту строку убираю
    };
    asyncData();
  }, []);

Внутри filterByRedColor используется state. Но при первом открытии страницы там пустой объект и приложение падает.
Как лучше выйти из положения?
Я пробую, добавляя еще один эффект:
useEffect(() => {
    Object.keys(filters).length && filterByRedColor();
  }, [filters]);
  • Вопрос задан
  • 69 просмотров
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
@glazzkoff
Можно просто передать данные в параметры функции:

const [filters, setFilters] = useState({});

  const filterByRedColor = (data) => {
    const apiUrl = `/api/?colorId=${data.colors.red}`;
    callApi(apiUrl);
  };

  useEffect(() => {
    const asyncData = async () => {
      const data = await getFilters();
      setFilters(data);
      filterByRedColor(data);
    };
    asyncData();
  }, []);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽