标签:并且 com files ops rri gate 完成 str 导航
通过navigation可以完成屏幕之间的调度操作,例如打开另一个屏幕;
当打开页面与导航器存在映射关系,那么当前页面 const {navigation} = this.props
会拿到 navigation属性,通过此属性又包含以下属性:
使用进行界面之间的跳转
基本操作
export const AppStackNavigator = StackNavigator({
HomeScreen: {
screen: HomeScreen
},
Page1: {
screen: Page1
})
class HomeScreen extends React.Component {
render() {
const {navigate} = this.props.navigation;
return (
<View>
<Text>This is HomeScreen</Text>
<Button
onPress={() => navigate('Page1', {name: 'Devio'})}
title="Go to Page1"
/>
</View>
)
}
}
获取屏幕的当前state
可以通过this.props.state.params来获取通过setParams()
,或navigation.navigate()
传递的参数。
基本操作
<Button
title={params.mode === 'edit' ? '保存' : '编辑'}
onPress={() =>
setParams({mode: params.mode === 'edit' ? '' : 'edit'})}
/>
<Button
title="Go To Page1"
onPress={() => {
navigation.navigate('Page1',{ name: 'Devio' });
}}
/>
const {navigation} = this.props;
const {state, setParams} = navigation;
const {params} = state;
const showText = params.mode === 'edit' ? '正在编辑' : '编辑完成';
改变路由的params
setParams: function setParams(params)
: 我们可以借助setParams
来改变route params,比如,通过setParams
来更新页面顶部的标题,返回按钮等
注意navigation.setParams改变的是当前页面的Params,如果要改变其他页面的Params可以通过NavigationActions.setParams完成,下文会讲到
基本操作
class ProfileScreen extends React.Component {
render() {
const {setParams} = this.props.navigation;
return (
<Button
onPress={() => setParams({name: 'Lucy'})}
title="Set title name to 'Lucy'"
/>
)
}
}
关闭当前屏幕
goBack: function goBack(key)
:我们可以借助goBack
返回到上一页或者路由栈的指定页面
key
表示你要返回到页面的页面标识如id-1517035332238-4
,不是routeName。navigation.state.key
来获得页面的标识。基本操作
export default class Page1 extends React.Component {
render() {
const {navigation} = this.props;
return <View style=>
<Text style={styles.text}>欢迎来到Page1</Text>
<Button
title="Go Back"
onPress={() => {
navigation.goBack();
}}
/>
</View>
}
}
向路由发送一个action
dispatch: function dispatch(action)
:给当前界面设置action,会替换原来的跳转,回退等事件。
基本操作
const resetAction = NavigationActions.reset({
index: 0,
actions: [
NavigationActions.navigate({
routeName: 'HomePage',
params:{
theme:theme,
selectedTab:selectedTab
},
})
]
})
navigation.dispatch(resetAction)
导航到其他的页面
三个参数
基本操作
import { NavigationActions } from 'react-navigation'
const navigateAction = NavigationActions.navigate({
routeName: 'Profile',
params: {},
action: NavigationActions.navigate({ routeName: 'SubProfileRoute'})
})
this.props.navigation.dispatch(navigateAction)
删掉所有的navigation state并且使用这个actions的结果来代替
两个参数:
基本操作
import { NavigationActions } from 'react-navigation'
const resetAction = NavigationActions.reset({
index: 0,
actions: [
NavigationActions.navigate({ routeName: 'Profile'})
]
})
this.props.navigation.dispatch(resetAction)
使用场景:比如进入APP首页后的splash页不在使用,这时可以使用*NavigationActions.reset
重置它。
index 参数被用来定制化当前激活的route。举个例子:使用两个routes WelcomePage和HomePage给一个基础的stack navigation设置。为了重置route到HomePage,但是在堆栈中又存放在WelcomePage之上,你可以这么做:
import { NavigationActions } from 'react-navigation'
const resetAction = NavigationActions.reset({
index: 1,
actions: [
NavigationActions.navigate({ routeName: 'WelcomePage'}),
NavigationActions.navigate({ routeName: 'HomePage'})
]
});
this.props.navigation.dispatch(resetAction);
返回到前一个screen并且关闭当前screen.backaction creator接受一个可选的参数:
参数:
基本操作
import { NavigationActions } from 'react-navigation'
const backAction = NavigationActions.back();
this.props.navigation.dispatch(backAction);
通过SetParams我们可以修改指定页面的Params。
两个参数:
基本操作 :
import { NavigationActions } from 'react-navigation'
const setParamsAction = NavigationActions.setParams({
params: { title: 'HomePage' },
key: 'id-1517035332238-4',
});
navigation中有setParams为什么还要有NavigationActions.setParams?
NavigationActions.setParams
了NavigationActions.setParams
可以修改所有页面的Params;有一种场景:有的时候我们需要在导航器中所定义的屏幕之外使用导航器来做页面跳转。
navigation
来完成的;const {navigation} = this.props;
来获取navigation
;navigation
;navigation
呢?基本操作:
import { NavigationActions } from 'react-navigation';
const AppNavigator = StackNavigator(SomeAppRouteConfigs);
class App extends React.Component {
someEvent() {
// call navigate for AppNavigator here:
this. navigation && this. navigation.dispatch(
NavigationActions.navigate({ routeName: someRouteName })
);
}
render() {
return (
<AppNavigator ref={nav => { navigation = nav; }} />
);
}
}
上述代码通过导航器的顶级节点的ref
属性获取到navigation
,当上述代码的AppNavigator
节点被渲染时,ref会被回调这是就可以获取到navigation
了,需要提醒大家的是,这种用法对除StackNavigator
之外的其他两种类型的导航器也是实用的哦;
标签:并且 com files ops rri gate 完成 str 导航
原文地址:https://www.cnblogs.com/cnloop/p/10518238.html