亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

你如何從 react-native 的子組件(帶參數)調用父函數?

你如何從 react-native 的子組件(帶參數)調用父函數?

達令說 2021-12-12 15:46:35
我有一個名為 HomeHeader 的 React 組件。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.jsconst SearchResultFlatList = (props) => {    return(        <Animated.View>        <FlatList          ....            <SearchListItem                clickLocationResult={props.clickLocationResult}                primaryText={item.primaryText}                fullText={item.fullText}            />)}          ....        />    </Animated.View>    )}來自 SearchListItem.jsconst SearchListItem = (props) => {    return (        <TouchableOpacity             style={styles.searchListItemContainer}            onPress={props.clickLocationResult(props.primaryText)}        >        ....        </TouchableOpacity>    );  }以這種方式調用它會導致函數被多次調用。我onTextChanged()在輸入字段上也有一個函數,每次我輸入它都會記錄props.primaryText值。我認為這與每次鍵入時都會創建新的 SearchListItems 的事實有關,但我不知道解決方法。
查看完整描述

2 回答

?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

您不能將帶有參數的函數傳遞給 onPress。而是定義一個箭頭函數,該函數使用像這樣的參數來執行您的 clickLocationResult。


const SearchListItem = props => {

  return (

    <TouchableOpacity

      style={styles.searchListItemContainer}

      onPress={() => props.clickLocationResult(props.primaryText)}

    >

      ....

    </TouchableOpacity>

  );

};


查看完整回答
反對 回復 2021-12-12
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

你能在 HomeHeader 中發布你的 onLocationPress 函數嗎?


我懷疑你需要的是所謂的函數柯里化。有很多關于此的資源,但基本思想是您的函數將被定義為:


function onLocationPress(text) {

    // this is your click handler

    return () => {

        // do something with that text

    }

}

當您為 onPress 處理程序提供帶有參數的函數時,該函數正在執行,結果將返回給處理程序,而不是函數本身。你想要的是 onLocationPress 成為一個返回另一個函數的函數。


查看完整回答
反對 回復 2021-12-12
  • 2 回答
  • 0 關注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號