useState изменил значение только в первый раз
Мой хук 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 ответа
Решение
Вот проблема ()=> setState(prevState => ({ ...prevState, count: +1 }))
и исправить это можно так:
onClick={() =>
setState(prevState => ({
...prevState,
count: prevState.count+1
}))
}
В вашем коде есть синтаксическая ошибка: 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>
);
};