React Native Android 中视图之间的导航示例?
Example of Navigation between views in React Native Android?
查看 React Native 文档后,我仍然不明白创建视图和在不同组件之间导航的最佳方式。
我不想使用任何外部组件,例如:
https://github.com/Kureev/react-native-navbar/
https://github.com/23c/react-native-transparent-bar
https://github.com/superdami/react-native-custom-navigation
我不需要导航栏,我只想设置视图并向左、向右滑动或弹出视图,仅此而已。
我知道是一些基本的东西,但我找不到任何有用的例子。
拜托,任何人都可以帮助我吗? https://rnplay.org/?
中的任何功能示例
谢谢。
我找到了这个例子:
https://rnplay.org/apps/HPy6UA
而且我已经写了一篇关于它的教程:
https://playcode.org/navigation-in-react-native/
理解 React Native 中的 Navigation 真的很有帮助:
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
Navigator,
TouchableOpacity,
} = React;
var SCREEN_WIDTH = require('Dimensions').get('window').width;
var BaseConfig = Navigator.SceneConfigs.FloatFromRight;
var CustomLeftToRightGesture = Object.assign({}, BaseConfig.gestures.pop, {
// Make it snap back really quickly after canceling pop
snapVelocity: 8,
// Make it so we can drag anywhere on the screen
edgeHitWidth: SCREEN_WIDTH,
});
var CustomSceneConfig = Object.assign({}, BaseConfig, {
// A very tighly wound spring will make this transition fast
springTension: 100,
springFriction: 1,
// Use our custom gesture defined above
gestures: {
pop: CustomLeftToRightGesture,
}
});
var PageOne = React.createClass({
_handlePress() {
this.props.navigator.push({id: 2,});
},
render() {
return (
<View style={[styles.container, {backgroundColor: 'green'}]}>
<Text style={styles.welcome}>Greetings!</Text>
<TouchableOpacity onPress={this._handlePress}>
<View style={{paddingVertical: 10, paddingHorizontal: 20, backgroundColor: 'black'}}>
<Text style={styles.welcome}>Go to page two</Text>
</View>
</TouchableOpacity>
</View>
)
},
});
var PageTwo = React.createClass({
_handlePress() {
this.props.navigator.pop();
},
render() {
return (
<View style={[styles.container, {backgroundColor: 'purple'}]}>
<Text style={styles.welcome}>This is page two!</Text>
<TouchableOpacity onPress={this._handlePress}>
<View style={{paddingVertical: 10, paddingHorizontal: 20, backgroundColor: 'black'}}>
<Text style={styles.welcome}>Go back</Text>
</View>
</TouchableOpacity>
</View>
)
},
});
var SampleApp = React.createClass({
_renderScene(route, navigator) {
if (route.id === 1) {
return <PageOne navigator={navigator} />
} else if (route.id === 2) {
return <PageTwo navigator={navigator} />
}
},
_configureScene(route) {
return CustomSceneConfig;
},
render() {
return (
<Navigator
initialRoute={{id: 1, }}
renderScene={this._renderScene}
configureScene={this._configureScene} />
);
}
});
var styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
color: 'white',
},
});
AppRegistry.registerComponent('SampleApp', () => SampleApp);
module.exports = SampleApp;
2018 年 4 月更新:
自从我的第一个回答以来,情况发生了变化,今天有两个大型库与导航相关:react-navigation 和 react-native-navigation。
我将为 react-navigation 编写一个示例,它是一个易于使用的库和完整的 JS,由社区中认真的人维护。
首先安装库:
yarn add react-navigation
或
npm install --save react-navigation
然后在您的应用程序入口点 (index.js) :
import Config from './config';
import { AppRegistry } from 'react-native';
import { StackNavigator } from 'react-navigation';
export const AppNavigator = StackNavigator(Config.navigation);
AppRegistry.registerComponent('appName', () => AppNavigator);
你可以看到我们向 StackNavigator 传递了一个 object,这是我们所有的屏幕配置,这里是一个配置示例:
import HomeScreen from "./HomeScreen";
import SettingsScreen from "./SettingsScreen";
const Config = {
navigation: {
Home: {
screen: HomeScreen
},
Settings: {
screen: SettingsScreen,
}
}
}
现在应用知道我们得到的每个屏幕。我们可以简单地告诉 "navigate" 函数转到我们的设置屏幕。
让我们看看我们的主屏幕:
class HomeScene extends Component {
constructor(props) {
super(props);
}
render () {
return (
<View>
<Button
title="Go to Settings"
onPress={() => this.props.navigation.navigate('Settings')}
/>
</View>
);
}
}
如您所见,导航会滋润道具。从这里你可以做你想要的。
转到库文档以查看您可以做的所有事情:更改 header 类型、标题、导航类型...
上一个答案:
看这个例子:
https://github.com/h87kg/NavigatorDemo
它很有用,是一个写得很好的 Navigator 示例,我认为它比你刚才写的上面那个要好。
主要看LoginPage.js
和MainPage.js
的关系
我建议你使用react-navigation you can take a look to the Navigator Playground example
- 为 iOS 和 Android
构建的组件
- 选择 TabNavigator, DrawerNavigator and StackNavigator。
- 实施您的 CustomNavigator
- 开发你自己的navigation views
- 通过服务器渲染在移动应用、Web 应用之间共享逻辑。
- Documentation 非常简单
- 集成了redux。
- 超级简单!
- 将成为react-native推荐的官方导航器!
安装导航模块。
npm install --save react-navigation
将其导入您的应用程序
import {
TabNavigator,
} from 'react-navigation';
const BasicApp = TabNavigator({
Main: {screen: MainScreen},
Setup: {screen: SetupScreen},
});
...并导航
class MainScreen extends React.Component {
static navigationOptions = {
label: 'Home',
};
render() {
const { navigate } = this.props.navigation;
return (
<Button
title="Go to Setup Tab"
onPress={() => navigate('Setup')}
/>
);
}
}
查看 React Native 文档后,我仍然不明白创建视图和在不同组件之间导航的最佳方式。
我不想使用任何外部组件,例如:
https://github.com/Kureev/react-native-navbar/
https://github.com/23c/react-native-transparent-bar
https://github.com/superdami/react-native-custom-navigation
我不需要导航栏,我只想设置视图并向左、向右滑动或弹出视图,仅此而已。
我知道是一些基本的东西,但我找不到任何有用的例子。
拜托,任何人都可以帮助我吗? https://rnplay.org/?
中的任何功能示例谢谢。
我找到了这个例子: https://rnplay.org/apps/HPy6UA
而且我已经写了一篇关于它的教程: https://playcode.org/navigation-in-react-native/
理解 React Native 中的 Navigation 真的很有帮助:
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
Navigator,
TouchableOpacity,
} = React;
var SCREEN_WIDTH = require('Dimensions').get('window').width;
var BaseConfig = Navigator.SceneConfigs.FloatFromRight;
var CustomLeftToRightGesture = Object.assign({}, BaseConfig.gestures.pop, {
// Make it snap back really quickly after canceling pop
snapVelocity: 8,
// Make it so we can drag anywhere on the screen
edgeHitWidth: SCREEN_WIDTH,
});
var CustomSceneConfig = Object.assign({}, BaseConfig, {
// A very tighly wound spring will make this transition fast
springTension: 100,
springFriction: 1,
// Use our custom gesture defined above
gestures: {
pop: CustomLeftToRightGesture,
}
});
var PageOne = React.createClass({
_handlePress() {
this.props.navigator.push({id: 2,});
},
render() {
return (
<View style={[styles.container, {backgroundColor: 'green'}]}>
<Text style={styles.welcome}>Greetings!</Text>
<TouchableOpacity onPress={this._handlePress}>
<View style={{paddingVertical: 10, paddingHorizontal: 20, backgroundColor: 'black'}}>
<Text style={styles.welcome}>Go to page two</Text>
</View>
</TouchableOpacity>
</View>
)
},
});
var PageTwo = React.createClass({
_handlePress() {
this.props.navigator.pop();
},
render() {
return (
<View style={[styles.container, {backgroundColor: 'purple'}]}>
<Text style={styles.welcome}>This is page two!</Text>
<TouchableOpacity onPress={this._handlePress}>
<View style={{paddingVertical: 10, paddingHorizontal: 20, backgroundColor: 'black'}}>
<Text style={styles.welcome}>Go back</Text>
</View>
</TouchableOpacity>
</View>
)
},
});
var SampleApp = React.createClass({
_renderScene(route, navigator) {
if (route.id === 1) {
return <PageOne navigator={navigator} />
} else if (route.id === 2) {
return <PageTwo navigator={navigator} />
}
},
_configureScene(route) {
return CustomSceneConfig;
},
render() {
return (
<Navigator
initialRoute={{id: 1, }}
renderScene={this._renderScene}
configureScene={this._configureScene} />
);
}
});
var styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
color: 'white',
},
});
AppRegistry.registerComponent('SampleApp', () => SampleApp);
module.exports = SampleApp;
2018 年 4 月更新:
自从我的第一个回答以来,情况发生了变化,今天有两个大型库与导航相关:react-navigation 和 react-native-navigation。
我将为 react-navigation 编写一个示例,它是一个易于使用的库和完整的 JS,由社区中认真的人维护。
首先安装库:
yarn add react-navigation
或
npm install --save react-navigation
然后在您的应用程序入口点 (index.js) :
import Config from './config';
import { AppRegistry } from 'react-native';
import { StackNavigator } from 'react-navigation';
export const AppNavigator = StackNavigator(Config.navigation);
AppRegistry.registerComponent('appName', () => AppNavigator);
你可以看到我们向 StackNavigator 传递了一个 object,这是我们所有的屏幕配置,这里是一个配置示例:
import HomeScreen from "./HomeScreen";
import SettingsScreen from "./SettingsScreen";
const Config = {
navigation: {
Home: {
screen: HomeScreen
},
Settings: {
screen: SettingsScreen,
}
}
}
现在应用知道我们得到的每个屏幕。我们可以简单地告诉 "navigate" 函数转到我们的设置屏幕。 让我们看看我们的主屏幕:
class HomeScene extends Component {
constructor(props) {
super(props);
}
render () {
return (
<View>
<Button
title="Go to Settings"
onPress={() => this.props.navigation.navigate('Settings')}
/>
</View>
);
}
}
如您所见,导航会滋润道具。从这里你可以做你想要的。
转到库文档以查看您可以做的所有事情:更改 header 类型、标题、导航类型...
上一个答案:
看这个例子: https://github.com/h87kg/NavigatorDemo
它很有用,是一个写得很好的 Navigator 示例,我认为它比你刚才写的上面那个要好。
主要看LoginPage.js
和MainPage.js
我建议你使用react-navigation you can take a look to the Navigator Playground example
- 为 iOS 和 Android 构建的组件
- 选择 TabNavigator, DrawerNavigator and StackNavigator。
- 实施您的 CustomNavigator
- 开发你自己的navigation views
- 通过服务器渲染在移动应用、Web 应用之间共享逻辑。
- Documentation 非常简单
- 集成了redux。
- 超级简单!
- 将成为react-native推荐的官方导航器!
安装导航模块。
npm install --save react-navigation
将其导入您的应用程序
import {
TabNavigator,
} from 'react-navigation';
const BasicApp = TabNavigator({
Main: {screen: MainScreen},
Setup: {screen: SetupScreen},
});
...并导航
class MainScreen extends React.Component {
static navigationOptions = {
label: 'Home',
};
render() {
const { navigate } = this.props.navigation;
return (
<Button
title="Go to Setup Tab"
onPress={() => navigate('Setup')}
/>
);
}
}