【发布时间】:2020-11-10 11:57:19
【问题描述】:
我不知道为什么,但出于某种原因,在这个简单的演示中,您必须提交两次表单才能更改 testState 的值。应该发生的情况是,每当您提交表单(第一次)时,testState 应该将其值更改为 "changed",但它似乎只会在第二次、第三次(等等)提交时发生。
任何人都可以在这里发现任何明显的东西吗?代码如下:
import React, { useState } from "react";
const App = () => {
const [testState, setTestState] = useState("unset");
const [inputValue, setInputValue] = React.useState("");
const submitMe = e => {
e.preventDefault();
setTestState("changed");
console.log("name change Fn", inputValue, 'testState', testState); // should log 'changed' after first submit
};
const onNameChange = e => {
console.log(e)
}
return (
<>
<form onSubmit={submitMe}>
<input
placeholder="the value"
type="text"
onChange={e => onNameChange(e.target.value)}
/>
<button type="submit">Submit</button>
</form>
</>
);
};
export default App;
还有一个 stackblitz 演示:https://stackblitz.com/edit/react-joe6jg
该值应与表单提交一起记录到控制台。
谢谢。
【问题讨论】:
-
状态是异步更新的。使用
useEffect挂钩记录更新的状态。在调用状态更新函数后立即记录状态将记录旧值。
标签: reactjs