Как я могу остановить бесконечный рендер l oop, если UseEffect () не может быть использован в обратном вызове в React. js? - PullRequest
0 голосов
/ 28 апреля 2020

Учащийся внешнего интерфейса пытается выяснить React ... Я просто не могу повесить эти крючки на React. Я пытаюсь установить setState внутри setArray (). Это вызывает бесконечное рендеринг l oop. React не позволит мне сделать обратный вызов с помощью useEffect (). Я не могу понять, как это исправить. Как я могу передать свой недавно структурированный массив в состояние?

   const [yearsArray, setYearsArrayState] = useState([]);    

    timelineData.then((data) => {
                let yearsArrays = [];
                for (let item of data.timelineInfo) {
                    yearsArrays.push(item.year);
                }
                setArray(yearsArrays);
            });

            const setArray = (array) => {
                const passArray = new Set(array);
                const oneOfEachYear = [...passArray];
                setYearsArrayState(oneOfEachYear);
            };
        return (<div>
        {yearsArray.map((item) => (
                                <button
                                    className={style.buttonYear}
                                    onClick={() => {
                                        toggle();
                                        setClickedYear(item);
                                        console.log(clickedYear);
                                    }}  >
                        </button>
         </div>);

1 Ответ

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

Вы помещаете timelineData в крюк для крепления компонентов

// This effect hook will be executed only once at the component mount
useEffect(() => {
  timelineData.then((data) => {
    let newYearsArrays = [];
     for (let item of data.timelineInfo) {
       newYearsArrays.push(item.year);
     }
     setArray(newYearsArrays);
  });
}, []);
...