为啥需要 this.props.componentId?

Posted

技术标签:

【中文标题】为啥需要 this.props.componentId?【英文标题】:Why is this.props.componentId needed?为什么需要 this.props.componentId? 【发布时间】:2019-10-12 18:44:44 【问题描述】:

为什么需要this.props.componentId

它的目的是什么?

为什么我们不能在不需要该 ID 的情况下使用该库?

react-navigation 不需要这样的东西,react-native-navigation v1 没有使用这样的东西。那么为什么 v2 需要并使用它呢?我问的原因首先是要理解它,其次是看看我是否可以跳过这个,因为现在我不能使用 saga 中的 RNN v2。

【问题讨论】:

【参考方案1】:

这是来自react-native-navigation 库developer 的blogpost 的详细答案。

所以现在我们要启用以下行为:用户点击文本后,应用推送ViewPost 屏幕。稍后,将相同的功能附加到列表项而不是文本将非常容易。要将新屏幕推送到此屏幕的导航堆栈中,我们将使用Navigation.push在新的 API 中,此方法期望接收可以在 props.componentID 中找到的当前 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 来获取对组件的引用。

【讨论】:

谢谢,但我的问题仍然存在。为什么在新 API 中需要它?它的目的是什么?我能从上面得到的只是它是需要的,而不是原因。

以上是关于为啥需要 this.props.componentId?的主要内容,如果未能解决你的问题,请参考以下文章

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥需要 preferredMaxLayoutWidth?

为啥需要 JsonRequestBehavior?

为啥我的程序需要两行输入,为啥我的 GPA 计算错误 c#?