输入值 onChange - React Hooks
Input value onChange - React Hooks
我试图收集在输入框中键入的值,但是当我使用 onChange 时,我只能获取之前的值。例如,在我刚刚输入 "text" 之后,要收集的最新值将是 "tex"
import React, {useState} from 'react';
import './SearchBar.css';
const SearchBar = (props) => {
const [input, setInput] = useState('');
const onChange = (e) => {
setInput(e.currentTarget.value);
console.log(input);
}
let sugestionList = (
<ul>
<li>item 1</li>
<li>item 2</li>
</ul>
)
return(
<div className="search-bar">
<input type="text" placeholder={props.placeholder} onChange={onChange}/>
{sugestionList}
</div>
)
}
那是因为更新状态是一个异步任务。要获取最新状态,您可以使用 useEffect()
挂钩。
useEffect(() => {console.log("input state is", input)}, [input]) //add the state in dependency array and this useEffect will run whenever state changes//
发生这种情况是因为更新状态是异步的,并且您正在同一个 onChange
函数中检查 (console.log),这就是为什么它没有提供正确的输入值但它是正确的 working/updating。
您可以在此处查看 -
而不是在 onChange
中执行控制台
const onChange = (e) => {
setInput(e.currentTarget.value);
}
console.log(input)
return(
<div className="search-bar">
<input type="text" placeholder={'props.placeholder'} onChange={onChange}/>
{sugestionList}
</div>
)
另一个解决方案正在使用 useEffect
,因为 Atin 已经发布了一个解决方案。
我试图收集在输入框中键入的值,但是当我使用 onChange 时,我只能获取之前的值。例如,在我刚刚输入 "text" 之后,要收集的最新值将是 "tex"
import React, {useState} from 'react';
import './SearchBar.css';
const SearchBar = (props) => {
const [input, setInput] = useState('');
const onChange = (e) => {
setInput(e.currentTarget.value);
console.log(input);
}
let sugestionList = (
<ul>
<li>item 1</li>
<li>item 2</li>
</ul>
)
return(
<div className="search-bar">
<input type="text" placeholder={props.placeholder} onChange={onChange}/>
{sugestionList}
</div>
)
}
那是因为更新状态是一个异步任务。要获取最新状态,您可以使用 useEffect()
挂钩。
useEffect(() => {console.log("input state is", input)}, [input]) //add the state in dependency array and this useEffect will run whenever state changes//
发生这种情况是因为更新状态是异步的,并且您正在同一个 onChange
函数中检查 (console.log),这就是为什么它没有提供正确的输入值但它是正确的 working/updating。
您可以在此处查看 -
而不是在onChange
中执行控制台
const onChange = (e) => {
setInput(e.currentTarget.value);
}
console.log(input)
return(
<div className="search-bar">
<input type="text" placeholder={'props.placeholder'} onChange={onChange}/>
{sugestionList}
</div>
)
另一个解决方案正在使用 useEffect
,因为 Atin 已经发布了一个解决方案。