Задать вопрос
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;
  • Вопрос задан
  • 698 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Frontend-разработка на React
    10 недель
    Далее
  • ProductStar
    Разработка на React
    6 недель
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
Решения вопроса 2
@bini1988
Отличная статья по теме useEffect. Если коротко, то вы на каждый рендер создаете новую функцию save и новую переменную html, при этом в момент выполнения функции open вы скорей всего захватите по замыканю переменную html из области видимости которая уже устареет на момент выполнения вновь созданной функции save по клику на кнопке. Для сохранения любого значения между рендерами без тригера ререндера компонента можно использовать useRef.
Ответ написан
Комментировать
В этом случае нужно почитать еще про useState кроме useEffect
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Kozack
@Kozack
Thinking about a11y
Скорее всего save вызывается до того, как закончится выполнение open. Вот переменная и пустая
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
от 250 000 до 300 000 ₽
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Екатеринбург
от 50 000 до 90 000 ₽