Задать вопрос
@darteil
Frontend developer

React hooks. Как вызвать функцию с обновленным state?

Вот пример кода:
function App() {
  const [count, setCount] = useState(0);

  const printCount = () =>{
    console.log(count);
  };

  const incCount = () => {
    setCount(count + 1);
    printCount();
  };

  return (
    <div className="App">
      <button onClick={() => { incCount(); }}>Inc count</button>
      <div>{count}</div>
    </div>
  );
}


При нажатии на кнопку "Inc count" вызывается метод incCount в которой увеличивается значение count и после сразу вызывается метод printCount который выводит значение count в консоль. Так вот, при нажатии значение count увеличилось и стало равно "1", но в консоли выводится значение "0", то есть старое значение. Как будто методы incCount и printCount работают асинхронно и incCount не успевает изменить значение перед вызовом printCount. Как вызвать несколько методов подряд и при этом быть уверенным что они будут работать с обновленным state?
  • Вопрос задан
  • 217 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
tsepen
@tsepen
Frontend developer
Для этого используется useEffect
useEffect(() => console.log(count), [count]);
в данном случае функция будет вызываться каждый раз при изменении count, и в нее уже можно добавлять что угодно, аналогично как работает callback в setState
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@medin84
software developer
получилось только так
export default function App() {
  let [count, setCount] = useState(0); // const >>> let

  const printCount = () =>{
    console.log(count);
  };

  const incCount = () => {
    count++; ///////////////////////// increment
    setCount(count); /////////////// set
    printCount();
  };

  return (
    <div className="App">
      <button onClick={() => { incCount(); }}>Inc count</button>
      <div>{count}</div>
    </div>
  );
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы