【问题标题】:Pass props from child to parent react navigation将道具从孩子传递给父母反应导航
【发布时间】:2018-03-29 11:54:12
【问题描述】:

我正在使用react-navigation。我将propsreact-native component 传递到modal,从react-navigation 通过水龙头打开。

export default class SomeComp extends Component {
...

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

modal 内部,我访问了关闭modalgoBack() 函数,以及通过SomeComp 传递的props

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 downModal 传递到SomeComp没有 使用redux。 在“正常”react-native parent-child component 中,我会使用简单的callback 来做到这一点。但是,这在这里不起作用,因为modal 是在router 中定义的,因此完全独立于SomeComp。它只是从那里调用...

【问题讨论】:

    标签: javascript react-native router react-navigation


    【解决方案1】:

    有一个非常简单的解决方案可以在goBack() 上将 props 传回父组件。

    您可以在调用 goBack() 或在 componentWillUnmount 之前将包含函数的额外道具传递给 Modal,您可以调用该函数。

    示例

    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>
           )
        }
    }
    

    【讨论】:

    • 天哪...我没想过将function 作为prop 传递给params...谢谢!
    • 如果您将函数作为参数传递,您将收到警告,因为它们不可序列化。这里有更多信息以及如何关闭警告reactnavigation.org/docs/troubleshooting/…
    猜你喜欢
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2020-04-06
    • 1970-01-01
    相关资源
    最近更新 更多