У меня есть реактивный компонент под названием HomeHeader. В HomeHeader лежит компонент без сохранения состояния, который называется SearchResultFlatList. В SearchResultFlatList находится компонент без сохранения состояния, который называется SearchListItem. HomeHeader имеет 2 поля ввода (одно для местоположения и одно для пункта назначения). После ввода в поле ввода SearchResultFlatList создается и повторно заполняется с помощью SearchListItems (каждый раз, когда я что-то печатаю (например, поиск в Google)) . При нажатии SearchListItem я хотел бы иметь возможность вызвать функцию, находящуюся в HomeHeader. Для этого необходимо щелкнуть SearchListItem и заполнить соответствующее поле ввода в HomeHeader.
Я объявил функцию в HomeHeader, которая называется onLocationPress. Он принимает один аргумент (т.е. onLocationPress (locationValue)). Очень просто передать ссылку на эту функцию дочерним компонентам, но становится сложнее, когда переменная задействована.
Из HomeHeader.js
<SearchResultFlatList
containerOpacity={this.state.opacityProp}
headerExpanded={this.state.headerExpanded}
results={this.props.searchResults}
clickLocationResult={this.onLocationPress}
/>
Из SearchResultFlatList.js
const SearchResultFlatList = (props) => {
return(
<Animated.View>
<FlatList
....
<SearchListItem
clickLocationResult={props.clickLocationResult}
primaryText={item.primaryText}
fullText={item.fullText}
/>)}
....
/>
</Animated.View>
)
}
Из SearchListItem.js
const SearchListItem = (props) => {
return (
<TouchableOpacity
style={styles.searchListItemContainer}
onPress={props.clickLocationResult(props.primaryText)}
>
....
</TouchableOpacity>
);
}
Вызов этого способа приводит к тому, что функция вызывается так много раз. У меня также есть функция onTextChanged()
в поле ввода, и каждый раз, когда я набираю, она записывает значение props.primaryText
.
Я думаю, что это как-то связано с тем, что каждый раз, когда я печатаюновые SearchListItems создаются, но я не знаю, как это сделать.