我的index.ios.js响应推送通知。如果手机处于打开状态,我希望将用户发送到其他页面。我不确定该怎么做。我正在使用OneSignals进行推送。
import React, { Component } from 'react';
import { ... } from 'react-native';
export default class Example extends Component {
componentWillMount() {
OneSignal.addEventListener('received', this.onReceived);
}
onReceived(notification) {
// triggers on push
}
renderScene(route, navigator){
return <route.component navigator={navigator} />
}
render() {
return (
<Navigator initialRoute={{component: Login}}
renderScene={this.renderScene.bind(this)} />
)
}
}
AppRegistry.registerComponent('Example', () => Example);
我尝试更改状态,然后重新渲染整个应用程序暂时有效,但锁定在该页面中,因为状态无法更新。
forceRerender(route, navigator){
return <BarberShow navigator={navigator} />
}
render() {
if(this.state.notification){
return <Navigator initialRoute={{component: AppointmentShow}} renderScene={this.forceRerender.bind(this)}/>
}else{
return <Navigator initialRoute={{component: Login}} renderScene={this.renderScene.bind(this)} />
}
}
答案 0 :(得分:1)
您在哪里更改了代码中的状态?
我还建议您使用'React-native-router-flux',它是管理导航的绝佳模块。
如果你使用它:
import React, { Component } from 'react';
import { ... } from 'react-native';
import Actions from 'react-native-router-flux';
export default class Example extends Component {
componentWillMount() {
OneSignal.addEventListener('received', this.onReceived);
}
onReceived(notification) {
// triggers on push
Actions.customView({notification})
}
renderScene(route, navigator){
return <route.component navigator={navigator} />
}
render() {
return (
<Navigator initialRoute={{component: Login}}
renderScene={this.renderScene.bind(this)} />
)
}
}
AppRegistry.registerComponent('Example', () => Example);
您可以轻松地将用户导航到任何视图/组件,并将通知数据也发送到该视图。
答案 1 :(得分:1)
对于本地反应我建议使用Ex-Navigation你可以在两者中使用它(反应原生和指数),它真的很好和东方。
答案 2 :(得分:1)
您所要做的就是添加一个全局范围变量来跟踪导航器,以便index.ios.js可以访问它。
var _navigator;
export default class Example extends Component {
componentWillMount() {
OneSignal.addEventListener('received', this.onReceived);
}
onReceived(notification) {
_navigator.push({
component: NewPageHere
});
}
renderScene(route, navigator){
_navigator = navigator;
return <route.component navigator={navigator} />
}
render() {
return (
<Navigator initialRoute={{component: Login}}
renderScene={this.renderScene.bind(this)} />
)
}
}