【问题标题】:How to pass Props to the Navigator?如何将 Props 传递给 Navigator?
【发布时间】:2023-04-02 20:48:01
【问题描述】:

所以,我有这样一个层次结构:

MyList ---> MyListNav

MyList 是一个包含我的东西列表的屏幕; MyListNavStackNavigatorModal 包裹,以便在按下MyList 屏幕上的Add New Stuff 按钮时弹出一个小窗口。

作为StackNavigatorMyListNav 有两个屏幕:

export default class Test extends Component {

    constructor(props){
        super(props)
        this.state = {
          isVisible: false
          }

        FVN = StackNavigator({
          Find: {screen: Find},
          Add: {screen: Add},
        },{
          mode: 'card',
          headerMode: 'none',
          cardStyle: {
            opacity: 1,
            backgroundColor: 'transparent',
          },
          // ...some transitioning configurations
        })
    }

    render() {
      return(
        <Modal
         isVisible={this.props.isVisible} avoidKeyboard>
         <TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
           <View style={styles.modal}>
             <FVN screenProps = {{isVisible: false}}/>
           </View>
         </TouchableWithoutFeedback>
        </Modal>
      )
    }

我知道这不是一种常见的做法,但我需要这样做,因为这是我发现在模态中导航的唯一方法,而且我正在为 iPad 这样做。

至于FindAdd,它们都有一个自定义的CLOSE 按钮来关闭MyListNav 模态。

现在的问题是,我知道如何将参数从MyListNav(child) 传递给MyList(parent),并使用MyList 中的状态来控制MyListNav 的可见性。但我无法找到将 FindAdd 的道具或状态传递给 MyListNav 的方法。或者说,我无法找到将按下CLOSE 按钮传递给MyListNav 的方法,正如我所尝试的那样,似乎Find/AddMyListNav 之间的关系不是儿童和parent,因此不能使用回调函数来这样做。

是否有任何常规解决方案?还是我在哪里弄错了??

【问题讨论】:

    标签: reactjs react-native react-navigation


    【解决方案1】:

    react-navigation 在您想将道具传递到屏幕时有点受限。

    如果您不使用redux,您的选择将非常有限。

    您可以做的是通过 screenProps 将初始化导航的组件中的道具传递到您的屏幕,您已经在此处执行此操作:&lt;FVN screenProps = {{isVisible: false}}/&gt;

    在您的FindAdd 屏幕中,您还应该能够看到/访问isVisible 属性。

    所以你可以这样做:

    <FVN screenProps = { { isVisible: false, findProps: {}, addProps: {} } }/>

    希望对你有帮助

    【讨论】:

    • 感谢您的回答。是的,我打算使用screenProps,但意识到我需要将参数从屏幕传递到导航器组件本身。在Find/Add 屏幕中,我可以访问screenProps 的唯一方法是通过this.props.screenProps,我认为它是不可变的。我错了吗?
    • 是的,道具是不可变的,这是有充分理由的。您宁愿做的是拥有一个处理应用程序状态的包装器组件并向下传递更改处理程序,该处理程序将设置该主应用程序根容器的状态(从而使其向下渗透到所有组件通过道具)。这样您就可以通过this.props.screenProps 传递一个changeHandler,它可以设置/更改应用程序状态。这有意义吗?如果您还有其他问题,请告诉我。
    • 效果很好,非常感谢。学会了一种完成工作的新方法。
    猜你喜欢
    • 2019-01-05
    • 2018-10-24
    • 2019-12-02
    • 2015-06-16
    • 2019-08-11
    • 2019-03-18
    • 2020-05-28
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多