簡體   English   中英

React.useState() 鈎子不反映新值

[英]React.useState() hook doesn't reflect new value

問題:為什么我的 setContact() function 不起作用?

我的鈎子聲明:

const [contact, setContact] = useState({
fName: "",
lName: "",
email: ""});

我的用戶界面元素:

<input
      name="email"
      placeholder="Email"
      onChange={catchEmail}
      value={contact.email}
    />

我的 onChange 處理程序:

function catchEmail(event) {
const { value: email } = event.target;
setContact((prevValue) => {
  prevValue.email += email;
  return prevValue;
});

}

我知道如何使它工作,但我想了解這段代碼有什么問題。

更改 DOM(有時)很昂貴。 如果新的 state 與舊的 state 完全相同 ( === ),React 理解這一點不會重新渲染組件。

Here, since you're mutating the existing state and returning it, the new state is the same object as the old state, so React skips re-rendering.

您需要返回一個的 object,以便 React 知道重新渲染。

setContact(prevValue => ({
  ...prevValue,
  email
}));

(您不想連接到現有的email值,您想將新的email state 值設置為新的完整輸入值,幾乎可以肯定)

你也可以通過分離不同的狀態值來避免這個問題,例如,這樣做:

const [email, setEmail] = useState('');
onChange={e => setEmail(e.target.vaue)}

通常建議使用掛鈎。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM