我是新来的本地人。
我使用的是NavigatorIOS,但它太有限了,所以我试图使用Navigator。在NavigatorIOS中,我可以通过调用this.props.navigator.push()
来更改视图,但它在Navigator中不起作用,它的结构似乎不同。如何使用Navigator更改视图?
答案 0 :(得分:33)
这是最小的工作导航器 - 它可以做得更多(见最后):
"导航"视图:
render: function() {
<Navigator style={styles.navigator}
renderScene={(route, nav) =>
{return this.renderScene(route, nav)}}
/>
},
renderScene: function(route,nav) {
switch (route.id) {
case "SomeComponent":
return <SomeComponent navigator={nav} />
case "SomeOtherComponent:
return <SomeOtherComponent navigator={nav} />
}
}
SomeComponent:
onSomethingClicked: function() {
// this will push the new component on top of me (you can go back)
this.props.navigator.push({id: "SomeOtherComponent"});
}
onSomethingOtherClicked: function() {
// this will replace myself with the other component (no going back)
this.props.navigator.replace({id: "SomeOtherComponent"});
}
此处更多详细信息https://facebook.github.io/react-native/docs/navigator.html您可以在示例项目中找到很多示例,这些示例是react-native的一部分:https://github.com/facebook/react-native/tree/master/Examples/UIExplorer
答案 1 :(得分:14)
我发现在展示导航器的工作原理时,Facebook的例子要么是简单的要么是复杂的。基于@ jarek-potiuk示例,我创建了一个简单的应用程序,可以来回切换屏幕。
在此示例中,我使用的是:react-native: 0.36.1
<强> index.android.js 强>
import React, { Component } from 'react';
import { AppRegistry, Navigator } from 'react-native';
import Apple from './app/Apple';
import Orange from './app/Orange'
class wyse extends Component {
render() {
return (
<Navigator
initialRoute={{screen: 'Apple'}}
renderScene={(route, nav) => {return this.renderScene(route, nav)}}
/>
)
}
renderScene(route,nav) {
switch (route.screen) {
case "Apple":
return <Apple navigator={nav} />
case "Orange":
return <Orange navigator={nav} />
}
}
}
AppRegistry.registerComponent('wyse', () => wyse);
应用/ Apple.js 强>
import React, { Component } from 'react';
import { View, Text, TouchableHighlight } from 'react-native';
export default class Apple extends Component {
render() {
return (
<View>
<Text>Apple</Text>
<TouchableHighlight onPress={this.goOrange.bind(this)}>
<Text>Go to Orange</Text>
</TouchableHighlight>
</View>
)
}
goOrange() {
console.log("go to orange");
this.props.navigator.push({ screen: 'Orange' });
}
}
应用/ Orange.js 强>
import React, { Component, PropTypes } from 'react';
import { View, Text, TouchableHighlight } from 'react-native';
export default class Orange extends Component {
render() {
return (
<View>
<Text>Orange</Text>
<TouchableHighlight onPress={this.goApple.bind(this)}>
<Text>Go to Apple</Text>
</TouchableHighlight>
</View>
)
}
goApple() {
console.log("go to apple");
this.props.navigator.push({ screen: 'Apple' });
}
}
答案 2 :(得分:2)
我遇到了同样的麻烦,无法找到一个很好的导航示例。我希望能够控制视图以转到新屏幕,但也能够返回上一屏幕。
我使用Andrew Wei的上述答案并创建了一个新应用程序,然后复制了他的代码。这很有效,但.push
将继续创建新的图层( Apple&gt; Orange&gt; Apple&gt; Orange&gt; Apple&gt; Orange 等)。因此,我在.pop
下的Orange.js
文件中使用goApple()
而不是.push。
这类似于&#34; 返回&#34;按钮现在,这是我正在寻找的,同时教导如何导航到其他页面。