你可以從你的'第一'組件做到這一點。您將不得不使用事件發射器從renderRight按鈕發出單擊的事件,在第一個組件中捕獲該事件,並從那裏推送新路線。你也可以使用這個道具來傳遞道具。這是解決方案。
首先定義renderRight按鈕類。
var EventEmitter = require('EventEmitter');
class NextButton extends React.Component {
constructor(props) {
super(props);
this.nextPressed = this.nextPressed.bind(this);
this.getView = this.getView.bind(this);
}
render() {
return(
this.getView()
);
}
getView() {
return (
<TouchableHighlight
onPress={this.nextPressed}
underlayColor='transparent'
style={Styles.rightBarButton}>
<Text
style={[Styles.rightBarButtonText, Styles.fontStyle, {color:'#6A6A6A'}]}>Next</Text>
</TouchableHighlight>
);
}
nextPressed() {
console.log("nextPressed CALLED!");
this.props.emitter.emit('nextpressed');
}
}
然後用這個作爲你的renderRight按鈕在'First component'裏面。此外,您需要捕獲觸發的事件並推送下一個組件。
class First extends Component {
static route = {
navigationBar: {
title: 'FIRST SCREEN',
titleStyle: [Styles.navigationBarTitle, Styles.fontStyle],
tintColor: '#000',
renderRight: ({ config: {eventEmitter} }) => (<NextButton emitter={eventEmitter}/>)
},
}
constructor(props) {
super(props);
this.pressedEventCallback = this.pressedEventCallback.bind(this);
}
...
componentWillMount() {
this._buttonPressSubscription = this.props.route.getEventEmitter().addListener('nextpressed', this.pressedEventCallback);
}
componentWillUnmount() {
this._buttonPressSubscription.remove();
}
...
pressedEventCallback() {
this.props.navigator.push(Router.getRoute('Second', {prop1: prop1, prop2: prop2}));
}
...
}
這種方式,你可以從按鍵火災事件,然後趕在你的組件,然後導航到通過道具以及其他屏幕或做任何你可以。請讓我知道這對你有沒有用。