javascript - 如何在处理程序中使用 useEffect 或反之亦然?
问题描述
我有一个函数,它是处理程序onChange
并获取输入的值,
而且我还有一个函数,用于使用来自该输入的搜索值在数组中搜索,
并呈现一个包含搜索数组作为道具的组件。
但是当我搜索它时我遇到了一个问题,但是在第二个字母之后并且当输入为空时它显示最后一次搜索。
我认为应该使用 useEffect 处理它,但我不知道如何解决或者可能是我错了我需要帮助来纠正,
感谢您的帮助。
这些是我的代码:
获取搜索值部分并作为参数发送:
function BasePage({handleClick, handleSearch }) {
const [searchValue, setSearchValue] = useState('');
useEffect(() => {
function handleChangeSearchInput(e) {
const newSearchValue = e.target.value;
setSearchValue(newSearchValue);
handleSearch(searchValue);
}
})
return (
<div>
<fieldset>
<legend>Search</legend>
<input
value = {searchValue}
onChange = {handleChangeSearchInput}
placeholder = "Enter name to search"
type = "text"
/>
<button onClick={() => handleClick('add-record-form')}>Add</button>
</fieldset>
<br />
{searchValue.length > 0 && <SearchRecord record = {searchValue} />}
</div>
);
}
这在父组件中过滤:
function handleSearch(searchValue) {
const searchedTerm = contacts.filter(contact => (contact.name.toLowerCase().includes(searchValue.toLowerCase())));
setSearchTerms(searchedTerm);
}
我用地图来展示它们。
解决方案
你不应该需要useEffect
这个。只需让处理程序处理状态设置和更新。
function handleChangeSearchInput(e) {
const newSearchValue = e.target.value;
setSearchValue(newSearchValue);
handleSearch(newSearchValue);
}
推荐阅读
- elasticsearch - 带有通配符的弹性搜索聚合过滤器
- apache-kafka - Apache Kafka:“由于未知的成员 ID,尝试加入组 xxxxxxxxxxx 失败”。关于为什么会发生这种情况的任何想法
- javascript - 从数据源生成导航并链接下拉菜单
- c# - 是否可以将对象序列化为字符串表示形式而不是超描述性嵌套 xml?
- javascript - 构建项目时,webpack由于相对路径而报错
- html - XPath 中的“/node()”和“node()”有什么区别?
- c - 指针显示为空或null
- spring-boot - Kubernetes集群-无法从多VM k8s集群中另一个pod中运行的spring boot服务访问pod中运行的Kafka代理
- remote-server - 无法使用 Myrtille 连接远程服务器
- python - Python Dropbox - 如何在 Dropbox 中创建目录并上传到该新文件夹?