reactjs - 带有 lodash debounce 的 NextJS 函数不起作用 [TypeError: search(...) is undefined]
问题描述
我一直在尝试在 NextJS 中创建一个组件,该组件根据给定的输入使用搜索 youtube。为了减少 API 调用的数量,我使用 lodash debounce 和 useCallback 挂钩,但我不断收到此错误:TypeError: search(...) is undefined
这是我写的代码:
export default function Player() {
const [modalVisibility, setModalVisibility] = useState(true);
const [searchQuery, setSearchQuery] = useState('');
const [searchResults, setSearchResults] = useState([]);
const search = useCallback(
debounce(async (keyword) => {
const response = await fetch("http://localhost:3000/api/search/" + keyword);
const data = await response.json();
return data;
}, 500),
[]
);
useEffect(() => {
if (searchQuery) {
search(searchQuery).then((results) => setSearchResults(results));
console.log(searchQuery)
console.log(searchResults)
} else {
setSearchResults([])
}
}, [searchQuery])
return (
<Modal label={'Search for videos'} show={modalVisibility} handleClose={() => setModalVisibility(false)}>
<div>
<IoSearch size='1.25em' color={searchQuery ? '#000' : '#9ca3af'}/>
<input type="text" value={searchQuery} onChange={(e) => setSearchQuery(e.target.value)} placeholder="eg: 'Standup Comedy'"/>
</div>
<SearchResults results={searchResults}/>
</Modal>
)
}
谁能帮我弄清楚为什么我的搜索功能未定义?
解决方案
debounce
leading: true
除非您为其指定选项,否则不会从内部函数返回值。
所以这不是你search
的未定义,而是没有承诺,也没有then(...)
从search(...)
调用中返回。
无论如何,我建议你移动你的setSearchResults
内部search
功能。如果用户键入某些内容然后快速删除查询,您仍然会有竞争条件。
推荐阅读
- git-commit - git commit --squash 选项有什么作用,为什么有用?
- php - 如何修复函数以避免错误日志(未定义的偏移量:2 in ....) - 爆炸
- rust - 为什么 cargo build 不能提供丰富多彩的错误信息?
- arrays - 如何在颤动中处理动态生成的小部件控制器
- python-3.x - 数据框两列之间的差异
- reactjs - 无法使用 axios.get 函数在 React js 中设置 Arrays 的 JSON 对象并在表中显示 Arrays 的对象
- minc - 将 BrainWeb (.mnc) 转换为 TumorSim 的 MetaImage (.mha) 格式
- javascript - 如何使用javascript检查对象中的值是否不存在或为NULL
- android - AutoCompleteTextView 上的 Android 材质微调器 NullPointerException
- java - 我有一个关于 java jar 包的问题