【发布时间】:2022-01-12 13:26:17
【问题描述】:
我写了一个函数,当点击按钮时改变项目的状态值。 当我尝试使用函数中更改的项目值更改 changeItem 值时,它没有被应用。 当我在函数内外查看console.log时,函数内部的item值并没有立即改变,而是确认了之前的值。
//before pressing the button
function App() {
const [item, setItem] = useState({
name: "",
color: "",
size: 10
})
const [changeItem, setchangeItem] = useState(item);
const onClickChangeItem = () => {
setItem((prev) => ({
...prev,
name: "haha",
color: "blue",
size: 30
}));
console.log(item);
setchangeItem(item);
console.log(changeItem);
}
console.log(item); // {name: '', color: '', size: 10}
console.log(changeItem); // {name: '', color: '', size: 10}
return (
<div>
<button onClick={onClickChangeItem}>change</button>
</div>
);
}
export default App;
//after pressing the button
function App() {
const [item, setItem] = useState({
name: "",
color: "",
size: 10
})
const [changeItem, setchangeItem] = useState(item);
const onClickChangeItem = () => {
setItem((prev) => ({
...prev,
name: "haha",
color: "blue",
size: 30
}));
console.log(item); // {name: '', color: '', size: 10}
setchangeItem(item);
console.log(changeItem);// {name: '', color: '', size: 10}
}
console.log(item); // {name: 'haha', color: 'blue', size: 30}
console.log(changeItem); //{name: '', color: '', size: 10}
return (
<div>
<button onClick={onClickChangeItem}>change</button>
</div>
);
}
export default App;
我想在按下按钮时立即将项目的更改值应用到changeItem,但之前的值会一遍又一遍地应用。 如何直接在函数内部应用更改的值?
【问题讨论】: