@lena_tihonova_bl

Как изменить переменную в useEffect?

Только начинаю изучать React, поэтому вопрос, наверное, очень глупый и очевидный, но тем не менее нормально сформулировать проблему и найти её решение в интернете никак не получается.
Есть переменная, представляющая собой массив с n-нным количеством элементов (сперва – с нулём):

function App() {
  const elements = [];
}

export default App;

Потом я добавляю туда несколько элементов в useEffect:

for (let i = 0; i < data.data.length; i++) {
            elements.push(<Uploaded_file button_name={data.data[i]} key={i}></Uploaded_file>)
            ...
}

Однако после загрузки страницы массив так и остаётся пустым. А если заполнить его чем-то в самом начале, то именно оно и выведется. Как можно решить эту проблему? Объясните, пожалуйста!

P.S. Пытавшись кое-как нагуглить решение, я могу предположить, что проблема с рендером, но как его применить – не понятно, ибо при попытке это сделать страница вовсе не прогружается.
  • Вопрос задан
  • 159 просмотров
Решения вопроса 1
Lapita12
@Lapita12
Тесты, тесты?
Проблема возникает из-за того, что когда вы изменяете массив elements, это не вызывает перерисовку компонента.
Чтобы изменять переменную в useEffect, вы можете использовать локальный state. Для этого можно использовать хук useState
import React, { useState, useEffect } from 'react';

function App() {
  const [elements, setElements] = useState([]);

  useEffect(() => {
    // вместо data.data используйте свой набор данных
    const data = { data: ['file1', 'file2', 'file3'] };
    const newElements = [];
    for (let i = 0; i < data.data.length; i++) {
      newElements.push(<Uploaded_file button_name={data.data[i]} key={i}></Uploaded_file>);
    }
    setElements(newElements);
  }, []);

  return (
    <div>
      {elements}
    </div>
  );
}

export default App;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Для начала изучения, просто последовательно прочитайте родную документацию на английском языке
https://reactjs.org/tutorial/tutorial.html
https://reactjs.org/docs/getting-started.html
Там есть и про стейт и про ефекти
useSate, useEffect
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы