1. 程式人生 > >原生native傳參進ReactNative導航根檢視StackNavigator時的引數處理方法

原生native傳參進ReactNative導航根檢視StackNavigator時的引數處理方法

原生部分程式碼這裡就不貼了,直接參考官網即可。

這裡只講RN部分如何處理,因為導航根檢視StackNavigator的頁面中並不是常規的RN元件建立過程,而是直接呼叫了react-navigation給我們整合好的配置入口完成導航根目錄的設定。也就是說,在這裡我們是無法呼叫函式也無法獲取到this.props的。

可是原生傳入的props引數只能夠傳遞到這裡,那麼我只能去他的原始碼裡面做文章了

經過查詢,找到了導航欄元件的建立檔案

檔案位置:專案目錄/node_modules/react-navigation/src/navigators/createNavigator.js

/* @flow */

import React from 'react';

import type {
  NavigationRouter,
  NavigationNavigator,
  NavigationNavigatorProps,
  NavigationRouteConfigMap,
} from '../TypeDefinition';
import {
  setConfig,
  setRole,
} from '../../../../app/common/BFConfig'
import type { NavigatorType } from './NavigatorTypes';

/**
 * Creates a navigator based on a router and a view that renders the screens.
 */
export default function createNavigator<C: *, S, A, NavigatorConfig, Options>(
  router: NavigationRouter<S, A, Options>,
  routeConfigs?: NavigationRouteConfigMap,
  navigatorConfig?: NavigatorConfig,
  navigatorType?: NavigatorType
) {
  return (
    NavigationView: ReactClass<C>
  ): NavigationNavigator<C, S, A, Options> => {
    class Navigator extends React.Component {
      props: NavigationNavigatorProps<Options, S>;

      static router = router;

      static routeConfigs = routeConfigs;
      static navigatorConfig = navigatorConfig;
      static navigatorType = navigatorType;

      //@Lo 在這裡將原生屬性傳入
      componentWillMount(){
        var originGroup = this.props.roleGroup;
        var originCode = this.props.roleCode;
        var originName = this.props.roleName;
        var userName = this.props.userName;
        var serverIP = this.props.serverIP;
        var serverType = this.props.serverType;
        //儲存進config中。
        setConfig(userName,serverIP,serverType);
        setRole(originGroup,originCode,originName);
      }

      render() {
        return <NavigationView {...this.props} router={router} />;
      }
    }

    return Navigator;
  };
}
這裡就是導航根檢視的元件建立地了,就按照常規RN元件的生命週期函式隨便拿一個進去處理我們需要的引數即可。

我是直接在配置檔案裡開了兩個配置函數出來方便呼叫,

../../../../app/common/BFConfig
4個../就返回到專案目錄了,可以自行引入需要的檔案。