Как установить значение ответа крюка в обещании? - PullRequest
2 голосов
/ 22 апреля 2020

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

const [rows, setRows] = useState([]);
useEffect(() => {
    async function fetchData() {
        myEmploiList({
            user: user.id
        }).then((data) => {
            //setRows(data);
            const newData = [];
            data.forEach((item, index) => {
                newData[index] = {
                    id: item._id,
                    name: item.name,
                    society: item.society
                };
                setRows(newData);
            });
        });
    }
    fetchData();
});

Ответы [ 2 ]

5 голосов
/ 22 апреля 2020

Вы должны добавить зависимости в ваш useEffect хук. Это второй аргумент этого хука.

useEffect(() => {
// your code
}, [deps]);

объяснение deps:

  • без значения: будет выполнять эффект каждый раз, когда ваш компонент рендерит.
  • [] : выполнит эффект только при первом отображении компонента.
  • [value1, value2, ...]: выполнит эффект при изменении какого-либо значения.

Для дальнейшего чтения я Настоятельно рекомендуем это сообщение в блоге .

0 голосов
/ 22 апреля 2020

Переместить setRows вызов из forEach l oop и включить user.id в массив зависимостей

const [rows, setRows] = useState([]);
useEffect(() => {
    async function fetchData() {
        myEmploiList({
            user: user.id
        }).then((data) => {
            //setRows(data);
            const newData = [];
            data.forEach((item, index) => {
                newData[index] = {
                    id: item._id,
                    name: item.name,
                    society: item.society
                };
            });
            setRows(newData);
        });
    }
    fetchData();
}, [user.id]);
...