Javascript 在React中将带参数的函数向下传递给孙子时出错
我有以下代码: 我的主要组成部分如下:Javascript 在React中将带参数的函数向下传递给孙子时出错,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我有以下代码: 我的主要组成部分如下: class Layout extends React.Component { constructor(){ super() this.state={ searchValue: '' } } getSearchValue(searchValue){ this.setState({searchValue}) } ... return <Filter getSe
class Layout extends React.Component {
constructor(){
super()
this.state={
searchValue: ''
}
}
getSearchValue(searchValue){
this.setState({searchValue})
}
...
return
<Filter
getSearchValue={this.getSearchValue.bind(this)}
/>
...
}
类布局扩展了React.Component{
构造函数(){
超级()
这个州={
搜索值:“”
}
}
getSearchValue(searchValue){
this.setState({searchValue})
}
...
返回
...
}
然后我有一个孩子,叫Filter:
class Filter extends React.Component {
...
return
<SearchBar
getSearchValue={this.props.getSearchValue}
/>
...
}
类过滤器扩展React.Component{
...
返回
...
}
最后是搜索组件本身:
class SearchBar extends React.Component {
handleEvent(e){
this.props.getSearchValue(e.target.value)
}
...
return
<input onChange={this.handleEvent.bind(this)}/>
}
类搜索栏扩展React.Component{
扶手通风口(e){
this.props.getSearchValue(e.target.value)
}
...
返回
}
现在,我很确定我有过类似的事情,但后来我把事情搞砸了,并试图重新做,但现在我收到一条错误消息:
未捕获类型错误:this.props.getSearchValue不是函数
我的装订有错吗?我试了好几次
如果我在布局中放置一个console.log('Hi')并从getSearchValue中删除this.setState(),并且我没有在SearchBar中将变量传递给this.props.getSearchValue,那么我会将消息发送到控制台。因此,函数可以工作,但只有在没有参数的情况下才能工作。为什么?以下语句中的编码是正确的,除了额外的部分):
<Filter
getSearchValue={this.getSearchValue.bind(this))}
/>
否则,代码的其他区域可能会出现问题。以下语句中的编码是正确的(额外的除外):
<Filter
getSearchValue={this.getSearchValue.bind(this))}
/>
否则,代码的其他区域可能会出现问题。您究竟在哪个组件中得到错误?这段代码看起来还可以,你能提供更多的组件代码吗?在搜索栏上。值我怀疑构造函数中缺少的
super()
可能导致这一问题。这段代码只是一个摘录。super就在那里。哦,我明白了,试着在布局的构造函数中进行绑定-this.getSearchValue=this.getSearchValue.bind(this)
,然后在SearchBar
中删除绑定,它在那里是不需要的。您在哪个组件中准确地得到了错误?这段代码看起来还可以,你能提供更多的组件代码吗?在搜索栏上。值我怀疑构造函数中缺少的super()
可能导致这一问题。这段代码只是一个摘录。super就在那里。哦,我明白了,试着在布局的构造函数中进行绑定-this.getSearchValue=this.getSearchValue.bind(this)
,然后在SearchBar
中删除绑定,那里不需要它。我也尝试过同样的方法,我真的能够调用setState函数。以这种方式将函数传递给孙子没有问题。我也尝试过同样的方法,我真的能够调用setState函数。以这种方式将函数传递给孙辈是没有问题的。