Использование useState в useEffect - PullRequest
0 голосов
/ 30 апреля 2020

Я использую useState для установки текста из TextInput, и я использую useEffect для перезаписи поведения с помощью кнопки назад.

const [text, setText] = useState("");

  <TextInput
    onChangeText={text => setText(text)}
    defaultValue={text}
  /> 

  const printVal() {
    console.log("text is " + text);
  }

 useEffect(() => {
    navigation.setOptions({
      headerLeft: () => (
        <HeaderBackButton onPress={() => printVal()} />
      )
    });
  });

Это всегда приводит к тому, что записываемый текст является исходным значением ofState. Если я не использую useEffect, это работает, но я не хочу устанавливать опцию навигации при каждом изменении. Могу ли я получить текущее значение из useState в моем useEffect или требуется другое решение?

1 Ответ

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

Вы забыли добавить зависимости как 2-й параметр в useEffect. Вы можете добавить пустой массив, если хотите, чтобы ваша функция вызывалась только 1 раз при загрузке компонента, или для этого примера вы должны добавить текст как зависимость, потому что useEffect зависит от этого значения

 useEffect(() => {
    navigation.setOptions({
      headerLeft: () => (
        <HeaderBackButton onPress={() => printVal()} />
      )
    });
  }, [text]);  //<- empty array here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...