mnml-by
@mnml-by
Молодой и талантливый

Почему переменная undefined?

React компонент. Его код очень упрощен. При вызове функции save в консоль выводит undefined. Как такое вообще возможно?
import React, { useEffect } from "react";
import axios from "axios";

const Editor = () => {
  let html;

  useEffect(() => {
    open("index.html");
  }, []);

  const open = page => {
    axios
      .get(`../${page}`)
      .then(resp => resp.data)
      .then(data => {
				html = data;
      });
  };

  const save = () => {
		console.log(html);
  };

  return (
    <>
      <button onClick={save}>
        Сохранить
      </button>
    </>
  );
};

export default Editor;
  • Вопрос задан
  • 634 просмотра
Решения вопроса 1
В этом случае нужно почитать еще про useState кроме useEffect
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@bini1988
Отличная статья по теме useEffect. Если коротко, то вы на каждый рендер создаете новую функцию save и новую переменную html, при этом в момент выполнения функции open вы скорей всего захватите по замыканю переменную html из области видимости которая уже устареет на момент выполнения вновь созданной функции save по клику на кнопке. Для сохранения любого значения между рендерами без тригера ререндера компонента можно использовать useRef.
Ответ написан
Комментировать
Kozack
@Kozack
Thinking about a11y
Скорее всего save вызывается до того, как закончится выполнение open. Вот переменная и пустая
Ответ написан
Ваш ответ на вопрос

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

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