为什么需要this.props.componentId?

时间:2019-05-27 07:52:26

标签: react-native react-native-navigation

为什么需要this.props.componentId

它的目的是什么?

为什么在没有该ID的情况下不能使用该库?

react-navigation不需要这样的东西,而react-native-navigation v1也不需要这样的东西。那么为什么v2需要并使用它?我问的原因是首先要了解它,其次要看看是否可以跳过此步骤,因为现在我无法从传奇中使用RNN v2。

1 个答案:

答案 0 :(得分:0)

这是react-native-navigationblogpostdeveloper给出的详细答案。

  

因此,我们现在要启用以下行为:用户单击文本后,应用程序将推动ViewPost屏幕。稍后,将相同的功能附加到列表项而不是文本将非常容易。要将新屏幕推送到该屏幕的导航堆栈中,我们将使用Navigation.push在新的API中,该方法希望接收当前的propsId。可以在props.componentID中找到。因此,在PostsList.js中,我们创建了一个pushViewPostScreen函数,并将其附加到Text的onPress事件上。

import React, {PureComponent} from 'react';
import {View, Text} from 'react-native-ui-lib';
import PropTypes from 'prop-types';
import {Navigation} from 'react-native-navigation';

class PostsList extends PureComponent {

  static propTypes = {
    navigator: PropTypes.object,
    componentId: PropTypes.string
  };

  constructor(props) {
    super(props);

    this.pushViewPostScreen = this.pushViewPostScreen.bind(this);
  }

  pushViewPostScreen() {
    // We pass the componentId to Navigation.push
    // to reference the which component will be pushed
    // to the navigation stack

    Navigation.push(this.props.componentId, {
      component: {
        name: 'blog.ViewPost',
        passProps: {
          text: 'Some props that we are passing'
        },
        options: {
          topBar: {
            title: {
              text: 'Post1'
            }
          }
        }
      }
    });
  }



  render() {
    return (
      <View flex center bg-blue60>
        <Text onPress={this.pushViewPostScreen}>Posts List Screen</Text>
      </View>
    );
  }
}

export default PostsList;

official docs中,似乎可以通过Navigation模块访问负责推,弹出和更改导航的Screen API,该模块始终期望props.componentId得到对组件的引用。