【发布时间】:2019-12-15 15:16:48
【问题描述】:
我正在尝试在我的社交网络中实现对用户个人资料的即时搜索。它似乎正在工作,但是在输入更改时设置状态(使用挂钩)会导致延迟一个字符。
我研究了一下,发现这个状态延迟问题可以通过在setState中使用回调函数来解决。但是,useState 不支持。
这是我的输入元素:
<input
type="text"
placeholder="Enter your query"
name="query"
onChange={e => onChange(e)}
/>
这是我的状态和 onChange 处理程序:
const [filteredData, setFilteredData] = useState({
query: "",
filteredProfiles: profiles
});
const onChange = e => {
setFilteredData({
query: e.target.value,
filteredProfiles: profiles.filter(person =>
person.user.name.includes(e.target.value)
)
});
console.log(e.target.value); // outputs correct value immediately
console.log(filteredData.query); // it's always one character late
console.log(filteredData.filteredProfiles); //works but 1 char late as well
};
【问题讨论】:
-
不是迟到一个字符,是为这次渲染准备的值,下一个值是为下一次渲染准备的
标签: reactjs input state react-hooks