react-native使用react-navigation進(jìn)行頁面跳轉(zhuǎn)導(dǎo)航的示例
首先要確認(rèn)已經(jīng)配置好react-native的環(huán)境。
# 創(chuàng)建一個(gè)native應(yīng)用,SimpleApp,然后進(jìn)入項(xiàng)目目錄 react-native init SimpleApp cd SimpleApp # 通過npm安裝最新版本的react-navigation npm install --save react-navigation # 運(yùn)行程序 react-native run-android
引入Stack Navigator
對于我們的應(yīng)用程序,我們想要使用堆棧式導(dǎo)航器,因?yàn)槲覀兿胍粋€(gè)概念的“堆?!睂?dǎo)航,其中每個(gè)新屏幕都放在堆棧頂部,然后從堆棧頂部移除一個(gè)屏幕。
import React from 'react'; import { AppRegistry, Text, } from 'react-native'; import { StackNavigator } from 'react-navigation'; class HomeScreen extends React.Component { static navigationOptions = { title: 'Welcome world', }; render() { return <Text>Hello, Navigation!</Text>; } }
const SimpleApp = StackNavigator({ Home: { screen: HomeScreen }, }); AppRegistry.registerComponent('SimpleApp', () => SimpleApp);
屏幕的title在靜態(tài)導(dǎo)航選項(xiàng)中是可配置的,在這里可以設(shè)置許多選項(xiàng)來配置導(dǎo)航器中的屏幕顯示。
添加一個(gè)新的屏幕
class ChatScreen extends React.Component { static navigationOptions = { title: 'Chat with Lucy', }; render() { return ( <View> <Text>Chat with Lucy</Text> </View> ); } }
然后在HomeScreen添加一個(gè)按鈕,鏈接到ChatScreen
class HomeScreen extends React.Component { static navigationOptions = { title: 'Welcome', }; render() { const { navigate } = this.props.navigation; return ( <View> <Text>Hello, Chat App!</Text> <Button onPress={() => navigate('Chat')} title="Chat with Lucy" /> </View> ); }
最后將添加的兩個(gè)頁面添加到StackNavigator中
const SimpleApp = StackNavigator({ Home: { screen: HomeScreen }, Chat: { screen: ChatScreen }, });
在這里,可以傳遞參數(shù),從HomeScreen傳遞
class HomeScreen extends React.Component { static navigationOptions = { title: 'Welcome', }; render() { const { navigate } = this.props.navigation; return ( <View> <Text>Hello, Chat App!</Text> <Button onPress={() => navigate('Chat', { user: 'Lucy' })} title="Chat with Lucy" /> </View> ); } }
ChatScreen接收參數(shù)
class ChatScreen extends React.Component { // Nav options can be defined as a function of the screen's props: static navigationOptions = ({ navigation }) => ({ title: `Chat with ${navigation.state.params.user}`, }); render() { // The screen's current route is passed in to `props.navigation.state`: const { params } = this.props.navigation.state; return ( <View> <Text>Chat with {params.user}</Text> </View> ); } }
添加第三個(gè)頁面,Three.js, ChatScreen跳轉(zhuǎn)到Three
import React,{Component} from 'react'; import { AppRegistry, Text, View, Button, } from 'react-native'; class Three extends React.Component { static navigationOptions = { title: 'Three Sceen', }; render() { const { goBack } = this.props.navigation; return ( <Button title="Go back" onPress={() => goBack()} /> ); } } export default Three;
修改ChatScreen的配置
class ChatScreen extends React.Component { static navigationOptions = { title: 'Chat with Lucy', }; render() { const { navigate } = this.props.navigation; return ( <View> <Text>Chat with Lucy</Text> <Button onPress={() => navigate('Three')} title="to to ThreeScreen" /> </View> ); } }
最后的結(jié)果如下:
最后給出完整代碼
文件 index.android.js
import SimpleApp from './App';
文件App.js
import React from 'react'; import { AppRegistry, Text, View, Button, } from 'react-native'; import { StackNavigator } from 'react-navigation'; import ThreeScreen from './Three.js'; class HomeScreen extends React.Component { static navigationOptions = { title: 'Welcome', }; render() { const { navigate } = this.props.navigation; return ( <View> <Text>Hello, Chat App!</Text> <Button onPress={() => navigate('Chat')} title="Chat with Lucy" /> </View> ); } } class ChatScreen extends React.Component { static navigationOptions = { title: 'Chat with Lucy', }; render() { const { navigate } = this.props.navigation; return ( <View> <Text>Chat with Lucy</Text> <Button onPress={() => navigate('Three')} title="to to ThreeScreen" /> </View> ); } } const SimpleApp = StackNavigator({ Home: { screen: HomeScreen }, Chat: { screen: ChatScreen }, Three: { screen: ThreeScreen}, }); AppRegistry.registerComponent('SimpleApp', () => SimpleApp);
文件Three.js
import React,{Component} from 'react'; import { AppRegistry, Text, View, Button, } from 'react-native'; class Three extends React.Component { static navigationOptions = { title: 'Three Sceen', }; render() { const { goBack } = this.props.navigation; return ( <Button title="Go back" onPress={() => goBack()} /> ); } } export default Three;
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
手挽手帶你學(xué)React之React-router4.x的使用
這篇文章主要介紹了手挽手帶你學(xué)React之React-router4.x的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02React Router 中實(shí)現(xiàn)嵌套路由和動(dòng)態(tài)路由的示例
React Router 是一個(gè)非常強(qiáng)大和靈活的路由庫,它為 React 應(yīng)用程序提供了豐富的導(dǎo)航和 URL 管理功能,能夠幫助我們構(gòu)建復(fù)雜的單頁應(yīng)用和多頁應(yīng)用,這篇文章主要介紹了React Router 中如何實(shí)現(xiàn)嵌套路由和動(dòng)態(tài)路由,需要的朋友可以參考下2023-05-05react?diff?算法實(shí)現(xiàn)思路及原理解析
這篇文章主要介紹了react?diff?算法實(shí)現(xiàn)思路及原理解析,本節(jié)我們正式進(jìn)入基本面試必考的核心地帶?--?diff?算法,了解如何優(yōu)化和復(fù)用?dom?操作的,還有我們常見的?key?的作用,需要的朋友可以參考下2022-05-05react實(shí)現(xiàn)antd線上主題動(dòng)態(tài)切換功能
這篇文章主要介紹了react實(shí)現(xiàn)antd線上主題動(dòng)態(tài)切換功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08