parent 和 child 元素之间的间接通信问题

Problem with indirect communication between parent and child elements

我在 React Native 中遇到间接通信问题。

我有一个 parent 组件,每个 class 一个组件。我有一个 child 组件,它是一个功能组件。

Parent:

constructor(props) {
  super(props);

  this.state = {
    search: '',
  };
 }

getInfoSearch(userSearch) {
 this.setState({
   search: userSearch
 })
}

render(){
  return(
   <SearchHeader placeholder={'Buscar procedimento'} getValueUserSearch={this.getInfoSearch}/>
  )
}

Child:

import React, {useState} from 'react';
import {View, TextInput} from 'react-native';

const SearchHeader = props => {
  const [search, setSearch] = useState('');

  const {placeholder, getValueUserSearch} = props;

  const handleSearch = (search) => {
    console.log(this);
    setSearch(search);
    getValueUserSearch(search);
  };

  return (
    <View>
      <TextInput placeholder={placeholder || 'Buscar'} onChangeText={handleSearch}/>
    </View>
  );
};

export default SearchHeader;

但是当我在输入文本中输入文本时,发生错误。说明:

"I cannot apply the setState function of undefined"

你知道我怎么解决这个问题吗?因为我想改变 parent 元素中的 'search' 状态。

因为你没有给handleSearch函数传递参数,应该是:

 onChangeText={(event) => handleSearch(event.target.value}

错误可能是因为 getInfoSearch 函数中的 this.setState 行。

尝试使用 arrow function 或在 constructor 中进行显式绑定,如下所示

constructor(props) {
  ...
  this.getInfoSearch = this.getInfoSearch.bind(this);
}

(或)

getInfoSearch = (userSearch) => {
  this.setState({ search: userSearch });
}

查看 here 了解更多详情。