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 了解更多详情。
我在 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 了解更多详情。