react-native使用react-navigation進行頁面跳轉導航

首先要確認已經配置好react-native的環境。

# 創建一個native應用,SimpleApp,然後進入項目目錄
react-native init SimpleApp
cd SimpleApp


# 通過npm安裝最新版本的react-navigation
npm install --save react-navigation


# 運行程序
react-native run-android

引入Stack Navigator
對於我們的應用程序,我們想要使用堆棧式導航器,因爲我們想要一個概念的“堆棧”導航,其中每個新屏幕都放在堆棧頂部,然後從堆棧頂部移除一個屏幕。
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在靜態導航選項中是可配置的,在這裏可以設置許多選項來配置導航器中的屏幕顯示。


添加一個新的屏幕
class ChatScreen extends React.Component {
static navigationOptions = {
title: 'Chat with Lucy',
};
render() {
return (
<View>
<Text>Chat with Lucy</Text>
</View>
);
}
}

然後在HomeScreen添加一個按鈕,鏈接到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>
);
}


最後將添加的兩個頁面添加到StackNavigator中
const SimpleApp = StackNavigator({
Home: { screen: HomeScreen },
Chat: { screen: ChatScreen },
});


在這裏,可以傳遞參數,從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接收參數
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>
);
}
}


添加第三個頁面,Three.js, ChatScreen跳轉到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>
);
}
}





最後的結果如下:










最後給出完整代碼

文件 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;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章