【发布时间】:2020-02-27 10:03:59
【问题描述】:
我有一个名为 HomeHeader 的反应组件。 HomeHeader 中有一个名为 SearchResultFlatList 的无状态组件。在 SearchResultFlatList 中有一个称为 SearchListItem 的无状态组件。 HomeHeader 有 2 个输入字段(一个用于位置,一个用于目的地)。在输入字段中输入后,SearchResultFlatList 会被创建并重新填充 SearchListItems(每次我输入内容(想想谷歌搜索))。单击 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 的事实有关,但我不知道如何解决。
【问题讨论】:
标签: javascript reactjs react-native parameter-passing parent-child