Любопытное поведение React

В последнее время я играл с хуками React и наткнулся на то, чего не мог понять.

  const [value, setValue] = useState("");

  const [filtered, setFiltered] = useState("");

  useLayoutEffect(() => {
    setFiltered(value);
  }, value);

  return (
      <input
        type = "text"
        value = {filtered}
        onChange = {e => setValue(e.target.value)}
      />
  );

Приведенный выше код работает нормально, пока я не попробую Backspace или Удалить. onChange не срабатывает. Мысли? P.S. Код не предназначен для продакшена, просто дурачится.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Приведенный выше код будет вести себя правильно, если только вы были вторым аргументом useLayoutEffect в виде массива, а не строки.

const [value, setValue] = useState("");

  const [filtered, setFiltered] = useState("");

  useLayoutEffect(
    () => {
      setFiltered(value);
    },
    [value]
  );

  return (
    <input
      type = "text"
      value = {filtered}
      onChange = {e => setValue(e.target.value)}
    />
  );

Другие вопросы по теме