2017-10-17 123 views
2

我正在使用react-navigation。我將propsreact-native component改爲modalreact-navigation開始在水龍頭上打開。將道具從小孩帶到父母反應導航

export default class SomeComp extends Component { 
... 

render() { 
    const { navigate } = this.props; 
    return (
     <TouchableOpacity 
     onPress={navigate("Modal", {data: ..., ...})} 
     ..../> 
     ) 
    } 
} 

modal裏面我訪問goBack()功能,關閉modal,以及通過SomeComp

export default class Modal extends Component { 
... 

render() { 
    const { data, ... } = this.props.navigation.state.params; 
    const { goBack } = this.props.navigation; 
    return (
     <View> 
      <TouchableOpacity 
      onPress={goBack()} 
      ..../> 
      <Text> 
       {data, ...} 
      </Text> 
     </View> 
     ) 
    } 
} 

什麼我不知道是通過props,無論是其可能的,或者不通過propsModalSomeComp,沒有使用redux。 在「正常」react-native parent-child component我會用簡單的callback來做到這一點。但是,這在此不起作用,因爲modalrouter中定義,因此,SomeComp完全獨立。它只有從那裏調用...

回答

4

有一個非常簡單的解決方案將道具傳遞給父組件goBack()

您可以將額外的道具包含功能傳遞給Modal,並且在致電goBack()componentWillUnmount之前,您可以調用該功能。

export default class SomeComp extends Component { 
... 

onGoBack = (someDataFromModal) => { 
    console.log(someDataFromModal); 
} 

render() { 
    const { navigate } = this.props; 
    return (
     <TouchableOpacity 
     onPress={navigate("Modal", {data: ..., ..., onGoBack: this.onGoBack})} 
     ..../> 
     ) 
    } 
} 

export default class Modal extends Component { 
... 

componentWillUnmount() { 
    if(this.props.navigation.state.params.onGoBack) { 
    this.props.navigation.state.params.onGoBack('I fired from Modal!'); 
    } 
} 

render() { 
    const { data, ... } = this.props.navigation.state.params; 
    const { goBack } = this.props.navigation; 
    return (
     <View> 
      <TouchableOpacity 
      onPress={goBack()} 
      ..../> 
      <Text> 
       {data, ...} 
      </Text> 
     </View> 
     ) 
    } 
} 
+0

哦,親愛的...我沒有想傳遞一個'function'通過'params' ...謝謝了'prop'! – Stophface