這個問題在這里已經有了答案: setState 不會立即更新狀態 (15 個回答) 5 小時前關閉。
當我在輸入元素中輸入第一個字符時,我得到“空字串”。
function form(props) {
// function getData(e){
// e.preventDefault()
// console.log(e.target[1].value)
const [title, setTitle] = useState("")
function getTitle(e){
setTitle(e.target.value)
console.log(title) //First time shows "empty string"
}
return (
<form >
<div>
<label >Title</label>
<input type="text" name="title" onChange={getTitle} />
</div>
</form>)
我看到它的方式,我在輸入元素中輸入一個字符,“onChange”事件被觸發,函式 getTitle 被運行,它設定了“title”變數,它被掛鉤到 useState 鉤子,然后我控制臺結果. 按照這個推理,我希望輸入第一個字符。相反,我得到“空字串”。從第二個字符開始,控制臺列印字符。
與“onInput”功能相同。
如何解決這個問題,為什么會發生?
uj5u.com熱心網友回復:
設定狀態是異步的,因此您console.log在設定狀態之前正在運行。如果您使用useEffect鉤子查看狀態,您應該會看到值。該useEffect鉤子在渲染后運行,因此您將看到當時更新的狀態資訊。
useEffect(() => {
console.log(title);
}, [title]);
uj5u.com熱心網友回復:
setTitle異步,您必須檢查title更改useEffect
useEffect(() => {
console.log(title);
}, [title])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/370895.html
標籤:javascript 反应
