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函数。以这种方式将函数传递给孙辈是没有问题的。