Javascript 子组件中未定义回调函数
在父组件中,我有一个更新状态的函数,当回调执行时,Javascript 子组件中未定义回调函数,javascript,reactjs,Javascript,Reactjs,在父组件中,我有一个更新状态的函数,当回调执行时,searchDocs() 该函数作为道具在子组件中传递 调用该函数时出现问题: -状态已更新 -但是searchDocs()未定义 无法找出它未定义的原因 父组件-传递的函数: // Method which is Not triggered and should be searchDocs(currentPage = 1) { const { selectedFilters, searchTags } = this.state;
searchDocs()
该函数作为道具在子组件中传递
调用该函数时出现问题:
-状态已更新
-但是searchDocs()
未定义
无法找出它未定义的原因
父组件-传递的函数:
// Method which is Not triggered and should be
searchDocs(currentPage = 1) {
const { selectedFilters, searchTags } = this.state;
if (!searchTags.length && !Object.keys(selectedFilters).length) {
return null;
}
const data = {
query: (searchTags || [])
.filter((item) => !item.id)
.map((item) => item.name)
.join(' '),
concepts: (searchTags || []).filter((item) => !!item.id),
selectedFilters,
offset: (currentPage - 1) * PAGE_SIZE,
pageSize: PAGE_SIZE
};
this.setState({ isLoading: true, currentPage });
return searchNews(data)
.then((res) => {
this.setState({ docs: res.hits.hits, total: res.hits.total, isLoading: false });
return res;
})
.then((res) =>
setLocalSearchResults({
selectedFilters: this.state.selectedFilters,
docs: res.hits.hits,
total: res.hits.total,
currentPage,
searchTags
})
)
.catch((err) => {
this.setState({ isLoading: false });
errorHandler(err, 'Error searching documents.');
});
}
resetFiltersState = () => {
this.setState(
{
selectedFilters: {},
collectionSaved: false
},
() => this.searchDocs()
);
};
render() {
return (
<CreateCollection resetFiltersState={this.resetFiltersState} />
)
}
//未触发且应
searchDocs(currentPage=1){
const{selectedFilters,searchTags}=this.state;
if(!searchTags.length&&!Object.keys(selectedFilters.length){
返回null;
}
常数数据={
查询:(searchTags | |[])
.filter((项目)=>!item.id)
.map((项)=>item.name)
.加入(“”),
概念:(searchTags | |[]).filter((item)=>!!item.id),
选定的过滤器,
偏移量:(当前页-1)*页大小,
页面大小:页面大小
};
this.setState({isLoading:true,currentPage});
返回搜索新闻(数据)
。然后((res)=>{
this.setState({docs:res.hits.hits,total:res.hits.total,isload:false});
返回res;
})
。然后((res)=>
setLocalSearchResults({
selectedFilters:this.state.selectedFilters,
文档:res.hits.hits,
总计:res.hits.total,
当前页,
搜索标签
})
)
.catch((错误)=>{
this.setState({isLoading:false});
errorHandler(err,“搜索文档时出错”);
});
}
resetFiltersState=()=>{
这是我的国家(
{
selectedFilters:{},
已保存的收藏:错误
},
()=>this.searchDocs()
);
};
render(){
返回(
)
}
儿童共同成分:
clearFilters = () => {
this.closeSaveCollectionPopup();
this.props.resetFiltersState(); // ==> This is a function which is passed from parent
this.resetCreateCollectionState();
};
// Here is where the event is triggered:
<button className="button" onClick={this.clearFilters}>
<span className="spacing-outher-right-1">{t('clearFilters')}</span>
<i className="material-icons md-29">highlight_off</i>
</button>
clearFilters=()=>{
this.closeSaveCollectionPopup();
this.props.resetFiltersState();//=>这是一个从父级传递的函数
此参数为.resetCreateCollectionState();
};
//以下是触发事件的位置:
{t('clearFilters')}
突出显示
您可以发布父组件的代码吗?您的代码应该可以工作,错误可能来自您的类中缺少的部分,您可以共享更多代码吗?searchDocs()
的代码在哪里?searchDocs()
在父组件中。实际上,我没有得到错误未定义。在调试器中,我看到该函数未定义,这就是为什么未调用的原因。请将searchDocs()更改为arrow函数,然后重试