Ich benutze react-native-router-flux
und ich weiß nicht, wie eine Redux-Aktion innerhalb der Symbolleiste Aktionen, je nach dem Zustand, wenn der Benutzer wählt eine Aktion aus versenden Wenn der Benutzer beispielsweise angemeldet ist und die Benutzerschaltfläche in der Symbolleiste drückt, sollte er zu seinem Profil navigieren, andernfalls sollte er zum Anmeldebildschirm navigieren.Dispatch-Aktion zum Reduce von read-native-Router-Flux-Ereignis
Dies ist, was ich versucht habe, und es funktioniert, aber es verlangsamt die Anwendung dramatisch (es ist nicht mehr verwendbar), wenn Sie einen Blick auf den Code, was macht eine globale Funktion zu initialisieren und zu setzen zum Redux-Geschäft, damit ich Aktionen mit ihm versenden kann.
'use strict'
import { Router, Scene, Actions } from 'react-native-router-flux';
//redux
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import * as actionCreators from '../redux/actions-creators/actions';
function mapStateToProps(state) {
return {
//...
}
}
function mapDispatchToProps(dispatch) {
return bindActionCreators(actionCreators, dispatch);
}
const scenes = Actions.create(
<Scene
key="root"
onRight={() => {
Actions.profile({});
}}>
<Scene
key="home"
component={Home}
title="Home"
initial={true} />
<Scene
key="login"
component={LoginScreen}
title="Login" />
<Scene
key="editProfile"
component={EditProfile}
title="EditProfile"
onRight={() => {
Actions.home({}); // this works
_logout(); // this is what i need to do,
// it calls the function below,
// dispatch is not available here, this gets compiled
// before the app runs
// this.props.logout(); // this is what i need
}} />
</Scene>
);
var logoutAction =() => {}; // gets assigned to the redux logout action
function _logout() {
logoutAction(); // calls the redux logout action
}
class AppNavigator extends React.Component {
constructor(props) {
super(props);
}
componentDidMount() {
logoutAction = this.props.logout; // this "hack" breaks performance
BackAndroid.addEventListener('hardwareBackPress', function() {
Actions.pop({});
return true;
});
}
render() {
return <Router scenes={scenes} />
}
}
const MainNavigator = connect(mapStateToProps, mapDispatchToProps)(AppNavigator);
export default MainNavigator;
Ich brauche den richtigen Weg zu finden, dies zu tun, wie in Dispatch Aktionen bilden die onRight={() => { ...here... });
Methode in der Szene
Eine andere Sache, ich war versucht, die Szene Definitionen in der render() Methode zu setzen, aber die app läuft viel langsamer, diese methode der definitionen außerhalb macht die app viel schneller laufen, aber es wird mir nicht erlauben, dies zu nennen.props, weil dies nicht definiert ist.
die ganze Sache Refactoring Ended, kann nicht die Antwort akzeptieren, weil sie nicht will arbeiten, um es zu beheben ein bisschen hoch? ty – octohedron
Wie würden Sie 'this.props' in einer statischen Methode bekommen? @Gazta, könnten Sie näher erläutern, was Sie geändert haben, um dies zum Laufen zu bringen oder Ihre eigene Antwort zu schreiben und das zu akzeptieren? –
Hallo @IrisSchaffer, gab ich auf diesem Ansatz auf, nun eine Schublade und zog ich die Szenen zurück zum Verfahren machen mit, dass Sie an die Stützen Zugang zu gewähren, hatte ich sie außerhalb der Komponente aus Performance-Gründen erklärt , aber jetzt funktioniert es gut. Schließen Sie einfach Ihre Navigatorkomponente wie Sie normalerweise mit redux tun, dann wickeln, dass bei dem Anbieter, es könnte einige „Schlüssel bereits definiert“ werfen, aber Sie müssen sich nicht darum kümmern, lassen Sie mich wissen, ob es funktioniert. – octohedron