#javascript #reactjs #react-native #frontend #dom-events
#javascript #reactjs #react-native #интерфейс #dom-события
Вопрос:
У меня проблема с непрямым взаимодействием в react native.
У меня есть родительский компонент, который является одним компонентом для каждого класса. И у меня есть дочерний компонент, который является функциональным компонентом.
Родительский:
constructor(props) {
super(props);
this.state = {
search: '',
};
}
getInfoSearch(userSearch) {
this.setState({
search: userSearch
})
}
render(){
return(
<SearchHeader placeholder={'Buscar procedimento'} getValueUserSearch={this.getInfoSearch}/>
)
}
Дочерний:
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;
Но когда я набираю текст в inputText, возникает ошибка. Заявляя, что:
«Я не могу применить функцию setState для undefined»
Вы знаете, как я мог бы решить эту проблему? Потому что я хочу изменить состояние ‘search’ в родительском элементе.
Комментарии:
1. Используйте функцию arrow для
getInfoSearch
. Еще выполните привязку вconstructor
2. Значение метода
this
insidegetInfoSearch
может быть не таким, каким вы его ожидаете. Попробуйте войтиthis
внутрьgetInfoSearch
и посмотреть, каково его значение.
Ответ №1:
Ошибка может быть из-за this.setState
строки в getInfoSearch
функции.
Попробуйте использовать arrow function
или выполните явную привязку в constructor
, как показано ниже
constructor(props) {
...
this.getInfoSearch = this.getInfoSearch.bind(this);
}
(Или)
getInfoSearch = (userSearch) => {
this.setState({ search: userSearch });
}
Проверьте здесь для получения более подробной информации.
Ответ №2:
Это потому, что вы не передаете аргумент handleSearch
функции, он должен быть:
onChangeText={(event) => handleSearch(event.target.value}