react-navigation
提供有goBack()
这api, 但是使用返回栈中某个组件的方法this.props.navigation.goBack('component')
或this.props.navigation.dispatch(NavigationActions.back({key: "component"}))
没有反应, 原理是因为这里的component
不是用自定义的routeName
而是用自动生成的随机值key
. 又没有提供有api获取组件的key
, 手动去获取又十分麻烦.
如何才能让goBack()
支持使用routeName
呢, 这里找到了一个解决方案 issues;
具体就是:
- 把
项目/node_modules/react-navigation/src/routers/StackRouter.js
文件里的const backRoute = state.routes.find((route: *) => route.key === action.key);
改成const backRoute = state.routes.find(route => route.routeName === action.key);
但不是很完美, 这里的component
要填想返回的组件的前一个组件的routeName
, 比如你的栈里顺序是home1
, home2
, home3
, home4
, 在home4
里要返回home2
, 使用this.props.navigation.goBack('home3');
; 并且又会带出一个问题: goBack()
方法没反应了, 必须加个null
进去, 写成goBack(null)
...
有点坑...
不知有没有更好的解决方法...
网友评论
index: index-2,
actions: [
NavigationActions.navigate({ routeName: 'Main'}),
]
})。然后dispatch。 这个能实现goBack的功能并且还能实现goBack实现不了的功能(比如反回到上一个页面的上一个页面;返回到栈的第几层,然后直接跳转至哪个页面。),可以对router栈进行各种操作。
这个框架的一个分支貌似新添加了2个属性来解决这个问题
但是很诡异的是,在当前页用this.props.navigation.state.key取到的key是上个页面的key
意思就是page1-> page2-> page3 如果要从page3回到page1,就要在page2取key然后传给page3