React Native:如何在不使用NavigatorIOS组件的情况下切换页面
React Native: How to switch page without using NavigatorIOS component?
我是react js和react native的新手,我想知道如何在不依赖navigatorIOS或navigator组件的情况下从一个页面(组件)导航到另一个页面?在混合开发模式下,这很容易,只需添加具有href属性的html元素A就可以了,但在React Native中,如何在不使用NavigatorIOS的情况下做到这一点?
一种方法是创建一个函数来呈现您想在单击时显示的组件,基本上复制href:的功能
changeComponent: function(component) {
this.setState({
componentSelected: component
})
},
renderComponent: function(component) {
if(component == 'One') {
return <ComponentOne changeComponent={this.changeComponent} />
} else if(component == 'Two') {
return <ComponentTwo changeComponent={this.changeComponent} />
} else if(component == 'Three') {
return <ComponentThree changeComponent={this.changeComponent} />
}
},
render: function() {
return (
<View style={styles.container}>
{this.renderComponent(this.state.componentSelected)}
</View>
);
}
并调用这样的函数:
<TouchableHighlight onPress={() => this.props.changeComponent('Two') } style={styles.button}><Text>Two</Text></TouchableHighlight>
我在这里建立了一个完整的项目:
https://rnplay.org/apps/HbqJpA
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
TouchableHighlight
} = React;
var SampleApp = React.createClass({
getInitialState: function() {
return {
componentSelected: 'One'
}
},
changeComponent: function(component) {
this.setState({
componentSelected: component
})
},
renderComponent: function(component) {
if(component == 'One') {
return <ComponentOne changeComponent={this.changeComponent} />
} else if(component == 'Two') {
return <ComponentTwo changeComponent={this.changeComponent} />
} else if(component == 'Three') {
return <ComponentThree changeComponent={this.changeComponent} />
}
},
render: function() {
return (
<View style={styles.container}>
{this.renderComponent(this.state.componentSelected)}
</View>
);
}
});
var ComponentOne = React.createClass({
render: function() {
return (
<View style={{backgroundColor: 'red', paddingTop:60, flex:1}}>
<Text style={{color: 'white', marginBottom:150, fontSize:20}}>Hello From Component One</Text>
<TouchableHighlight onPress={() => this.props.changeComponent('Two') } style={styles.button}><Text>Two</Text></TouchableHighlight>
<TouchableHighlight onPress={() => this.props.changeComponent('Three') } style={styles.button}><Text>Three</Text></TouchableHighlight>
</View>
)
}
})
var ComponentTwo = React.createClass({
render: function() {
return (
<View style={{backgroundColor: 'orange', paddingTop:60, flex:1}}>
<Text style={{color: 'white', marginBottom:150, fontSize:20}}>Hello From Component Two</Text>
<TouchableHighlight onPress={() => this.props.changeComponent('One') } style={styles.button}><Text>One</Text></TouchableHighlight>
<TouchableHighlight onPress={() => this.props.changeComponent('Three') } style={styles.button}><Text>Three</Text></TouchableHighlight>
</View>
)
}
})
var ComponentThree = React.createClass({
render: function() {
return (
<View style={{backgroundColor: 'purple', paddingTop:60, flex:1}}>
<Text style={{color: 'white', marginBottom:150, fontSize:20}}>Hello From Component Three</Text>
<TouchableHighlight onPress={() => this.props.changeComponent('One') } style={styles.button}><Text>One</Text></TouchableHighlight>
<TouchableHighlight onPress={() => this.props.changeComponent('Two') } style={styles.button}><Text>Two</Text></TouchableHighlight>
</View>
)
}
})
var styles = StyleSheet.create({
container: {
flex: 1,
},
button: {
flexDirection: 'row',
height: 60,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#ededed'
}
});
AppRegistry.registerComponent('SampleApp', () => SampleApp);
这是纳德的代码,但更新到了react原生的最新版本
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
Image,
WebView,
Dimensions,
Modal,
TouchableHighlight
} from 'react-native';
class test extends Component {
constructor(props)
{
super(props);
this.state =
{
componentSelected: 'One',
}
}
changeComponent = (component) =>{
this.setState({componentSelected: component});
}
renderComponent(component) {
if(component == 'One') {
return <ComponentOne changeComponent={this.changeComponent} />
} else if(component == 'Two') {
return <ComponentTwo changeComponent={this.changeComponent} />
} else if(component == 'Three') {
return <ComponentThree changeComponent={this.changeComponent} />
}
}
render() {
return (
<View style={styles.container}>
{this.renderComponent(this.state.componentSelected)}
</View>
);
}
}
class ComponentOne extends Component {
render() {
return (
<View style={{backgroundColor: 'red', paddingTop:60, flex:1}}>
<Text style={{color: 'white', marginBottom:150, fontSize:20}}>Hello From Component One</Text>
<TouchableHighlight onPress={() => this.props.changeComponent('Two') } style={styles.button}><Text>Two</Text></TouchableHighlight>
<TouchableHighlight onPress={() => this.props.changeComponent('Three') } style={styles.button}><Text>Three</Text></TouchableHighlight>
</View>
)
}
}
class ComponentTwo extends Component {
render() {
return (
<View style={{backgroundColor: 'orange', paddingTop:60, flex:1}}>
<Text style={{color: 'white', marginBottom:150, fontSize:20}}>Hello From Component Two</Text>
<TouchableHighlight onPress={() => this.props.changeComponent('One') } style={styles.button}><Text>One</Text></TouchableHighlight>
<TouchableHighlight onPress={() => this.props.changeComponent('Three') } style={styles.button}><Text>Three</Text></TouchableHighlight>
</View>
)
}
}
class ComponentThree extends Component {
render() {
return (
<View style={{backgroundColor: 'purple', paddingTop:60, flex:1}}>
<Text style={{color: 'white', marginBottom:150, fontSize:20}}>Hello From Component Three</Text>
<TouchableHighlight onPress={() => this.props.changeComponent('One') } style={styles.button}><Text>One</Text></TouchableHighlight>
<TouchableHighlight onPress={() => this.props.changeComponent('Two') } style={styles.button}><Text>Two</Text></TouchableHighlight>
</View>
)
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
button: {
flexDirection: 'row',
height: 60,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#ededed'
}
});
AppRegistry.registerComponent('test', () => test);
相关文章:
- React重新渲染但未显示正确的组件
- 不能从angular2中的子组件指定父组件中的数组
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- React组件等待所需道具进行渲染
- 如何创建带有插槽的vue js组件预加载程序
- KnockoutJS-组件-多个实例
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何在react js中将值从一个组件发送到另一个组件
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- React组件-设置页面标题
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- 如何在salesforce aura闪电组件中使用jQuery.val()
- 为react组件传递道具的最佳方式
- [Vue warn]:未能解析组件
- 如何控制组件'的createContent函数被激发
- react组件中的绑定方法
- 如何在react js中移动第二个组件
- 多个组件是如何实现的
- 组件生命周期问题/无法处理未定义的问题
- React Native:如何在不使用NavigatorIOS组件的情况下切换页面