Установка состояния внутри useEffect нарушает мою структуру данных? - PullRequest
0 голосов
/ 24 февраля 2020

Я пытался установить состояние в своем хуке useEffect, но он возвратил бесконечно вложенный объект вместо плоской коллекции:

  const [items, setItems] = useState([]);
  useEffect(() => {
    if (loading || error) return;
    let { items } = data;
    items = items.map(r => ({
      ...r,
      questionData: JSON.parse(r.data),
      updatedAt: format(new Date(`${r.updatedAt}.000Z`), 'yyyy-MM-dd')
    }));

    setItems(items);
  }, [loading, error, data]);

Ожидается это:

enter image description here

но получил это вместо:

enter image description here

1 Ответ

0 голосов
/ 24 февраля 2020
 const [items, setItems] = useState([]);
  useEffect(() => {
    if (loading || error) return;
    let { items } = data;
    items = items.map(r => ({
      ...r,
      questionData: JSON.parse(r.data),
      updatedAt: format(new Date(`${r.updatedAt}.000Z`), 'yyyy-MM-dd')
    }));

    setItems(items);
  }, [loading, error, data]);

Почему вы установили состояние с названием items, а внутри своего useEffect - локальную переменную с именем items? Это вызовет проблемы.

Просто измените локальную переменную на имя, которое имеет больше смысла и не конфликтует с вашим состоянием.

let dataItems = data;
dataItems = dataItems.map(dataItem => ({...})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...