原生native傳參進ReactNative導航根檢視StackNavigator時的引數處理方法
阿新 • • 發佈:2019-02-14
原生部分程式碼這裡就不貼了,直接參考官網即可。
這裡只講RN部分如何處理,因為導航根檢視StackNavigator的頁面中並不是常規的RN元件建立過程,而是直接呼叫了react-navigation給我們整合好的配置入口完成導航根目錄的設定。也就是說,在這裡我們是無法呼叫函式也無法獲取到this.props的。
可是原生傳入的props引數只能夠傳遞到這裡,那麼我只能去他的原始碼裡面做文章了
經過查詢,找到了導航欄元件的建立檔案
檔案位置:專案目錄/node_modules/react-navigation/src/navigators/createNavigator.js
這裡就是導航根檢視的元件建立地了,就按照常規RN元件的生命週期函式隨便拿一個進去處理我們需要的引數即可。/* @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; }; }
我是直接在配置檔案裡開了兩個配置函數出來方便呼叫,
../../../../app/common/BFConfig
4個../就返回到專案目錄了,可以自行引入需要的檔案。