Mobx + React Native 获取路由的状态信息
年前公司由一个项目是使用 主要讲解的还是
API介绍在开发之前我先向大家介绍一下需要使用到的API
实现代码import * as React from "react"; import * as stores from "@stores"; import Router from "./router";// 自己定义的路由结构 import { Provider } from "mobx-react/native"; import { addNavigationHelpers } from "react-navigation"; import { observer } from "mobx-react"; import { useStrict } from "mobx"; useStrict(true); console.disableYellowBox = true; interface Props {} interface State {} @observer export default class App extends React.Component<Props,State> { constructor(props,context) { super(props,context); } render() { let { nav } = stores; return ( <Provider {...stores}> <Router navigation={addNavigationHelpers({ dispatch: nav.dispatch.bind(nav),state: nav.navigatorState })} /> </Provider> ); } } // store import { observable,action,computed } from "mobx"; import { NavigationActions,NavigationState } from "react-navigation"; import RootRouter from "@router/index"; // 自己定义的路由结构 export class NavStore { @observable.ref navigatorState: NavigationState; constructor() { this.navigatorState = RootRouter.router.getStateForAction( NavigationActions.init(),null ); } // 提供一个获取当前路由层级的功能 private getRouterName(state) { let childRouters = state.routes; if (childRouters && childRouters.length > 0) { let curRouterName = childRouters[state.index].routeName; let nextRouterName = this.getRouterName(childRouters[state.index]); let result = nextRouterName ? "-" + nextRouterName : ""; return curRouterName + result; } return ""; } @computed get routerName() { return this.getRouterName(this.navigatorState); } @action dispatch(action) { const previousNavState = this.navigatorState; return (this.navigatorState = RootRouter.router.getStateForAction( action,previousNavState )); } } export default new NavStore(); 大家对 另外一些小问题在开发 import { NavigationActions } from "react-navigation"; // 使用我上面定义的dispatch // 简单跳转 dispatch( NavigationActions.navigate({ routeName: "Search" }) ); // 带参数跳转 dispatch( NavigationActions.navigate({ routeName: "Search",params : { name : "Jason "} }) ) // 多级跳转 dispatch( NavigationActions.navigate({ routeName: "Search",action : NavigationActions.navigate({ routeName: "User" }) }) );
这篇文章是年前的
参考资料:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |