如何使用 setState() 在 React 中立即更新表单的输入文本状态
How to update a form's input text state immediately in React using setState()
const [text, setText] = useState('');
const handleTextChange = (e) => {
setText(e.target.value);
}
// Inside a form
<input onChange={handleTextChange} value={text} type="text" />
我正在尝试做一些非常简单的事情,但无法让它正常工作。从上面的代码中,我有文本和 setText 来存储和更新状态,以及一个由输入字段的 onChange 方法调用的函数 handleTextChange。
我知道 setState() 是异步的,所以不会立即更新,但是,如果我需要立即访问更新后的结果,我该如何获取它?我读过 useEffect 钩子可以用来做这个,但我不知道我需要如何使用它。如果还有其他方法可以做到这一点,请分享。
主要objective是在用户在输入字段中输入时获取“文本状态变量的更新值”。
您可以使用 e.target.value
作为最新值,除非您真的想使用状态变量,然后您可以将其包装在 useEffect
中,但似乎没有必要这样做: )
你可以直接使用disabled={text.length===10}
我认为 useEffect
不适合您的尝试
function App({ onSubmit }) {
const [text, setText] = React.useState("")
return <form onSubmit={e => onSubmit(text)}>
<input
onChange={e => setText(e.target.value)}
value={text}
placeholder="enter a comment"
/>
<button
type="submit"
disabled={text.length >= 10}
children="disabled at 10 chars"
/>
<p>{Math.max(0, 10 - text.length)} characters remaining...</p>
</form>
}
ReactDOM.render(<App onSubmit={alert} />, document.querySelector("#app"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.14.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.14.0/umd/react-dom.production.min.js"></script>
<div id="app"></div>
const [text, setText] = useState('');
const handleTextChange = (e) => {
setText(e.target.value);
}
// Inside a form
<input onChange={handleTextChange} value={text} type="text" />
我正在尝试做一些非常简单的事情,但无法让它正常工作。从上面的代码中,我有文本和 setText 来存储和更新状态,以及一个由输入字段的 onChange 方法调用的函数 handleTextChange。
我知道 setState() 是异步的,所以不会立即更新,但是,如果我需要立即访问更新后的结果,我该如何获取它?我读过 useEffect 钩子可以用来做这个,但我不知道我需要如何使用它。如果还有其他方法可以做到这一点,请分享。
主要objective是在用户在输入字段中输入时获取“文本状态变量的更新值”。
您可以使用 e.target.value
作为最新值,除非您真的想使用状态变量,然后您可以将其包装在 useEffect
中,但似乎没有必要这样做: )
你可以直接使用disabled={text.length===10}
我认为 useEffect
不适合您的尝试
function App({ onSubmit }) {
const [text, setText] = React.useState("")
return <form onSubmit={e => onSubmit(text)}>
<input
onChange={e => setText(e.target.value)}
value={text}
placeholder="enter a comment"
/>
<button
type="submit"
disabled={text.length >= 10}
children="disabled at 10 chars"
/>
<p>{Math.max(0, 10 - text.length)} characters remaining...</p>
</form>
}
ReactDOM.render(<App onSubmit={alert} />, document.querySelector("#app"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.14.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.14.0/umd/react-dom.production.min.js"></script>
<div id="app"></div>