useState изменил значение только в первый раз - PullRequest
2 голосов
/ 30 марта 2020

мой хук useState меняет состояние только один раз, все время, что у меня есть 1. Как я могу это исправить?

 const My = () => {
    const [state,setState] = useState({
        count : 0
    })

    useEffect(() => {
        console.log(state);
      },[state]);

    return (
        <div>
            <h1>{state.count}</h1>
            <button onClick={()=> setState(prevState => ({
                ...prevState,
                count: +1
            }))}>Click</button>
        </div>
    );
};

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

В вашем коде есть синтаксическая ошибка: count: +1.

Итак, быстрое исправление таково:

const My = () => {
  const [state,setState] = useState({
    count : 0
  })

  useEffect(() => {
    console.log(state);
  }, [state]);

  return (
    <div>
      <h1>{state.count}</h1>
      <button onClick={()=> setState(prevState => ({
        ...prevState,
        count: prevState.count + 1
       }))}>Click</button>
    </div>
  );
};

Однако ваш код может быть значительно упрощен. Это выведет точно то же самое:

const My = () => {
  const [count, setCount] = useState(0);

  console.log(state);

  return (
    <div>
      <h1>{state.count}</h1>
      <button onClick={()=> setCount(count + 1)}>Click</button>
    </div>
  );
};
1 голос
/ 30 марта 2020

Вот проблема ()=> setState(prevState => ({ ...prevState, count: +1 })) и может быть исправлена ​​следующим образом:

onClick={() =>
           setState(prevState => ({
             ...prevState,
             count: prevState.count+1
           }))
         }
...