Ich habe ein seltsames Verhalten. Sobald ich die Socket-Verbindung zum react/redux-System hinzugefügt habe, wird meine Hauptkomponente immer neu gerendert, sobald eine nächste Aktion ausgelöst wird.Redux // React Component rendert zweimal nach Action-Dispatching
Ich habe auch das Verhalten, wenn ich wieder auf einen Navigationslink klicke (die gleiche Routing-Aktion versenden), der Compoenent auch rerenders, auch ich bleibe auf der gleichen Seite.
Könnte mir jemand hier helfen, auf den richtigen Weg zu kommen? Vielen Dank!
Einrichtung reagieren 0.15.x redux reagieren Router-v4 reagieren-Router-redux
app.jsx und App-Struktur für den Container:
class Root extends React.Component {
render() {
return (
<Provider store={store}>
<Router history={history}>
<Route path="/" component={RootContainer}>
<IndexRoute component={HomePage} />
<Route path="/start" component={StartPage} />
<Route path="*" component={NotFoundPage} />
</Route>
</Router>
</Provider>
);
}
}
RootContainer
class RootContainer extends React.Component {
...
componentWillMount() {
this.connectToSocket();
this.joinChannel();
}
componentWillUnmount() {
this.socket.disconnect();
}
...
connectToSocket() {
this.socket = new Socket('/socket');
this.socket.connect();
this.socket.onOpen(() => {
this.props.connectState(); // ACTION CALL
});
this.socket.onError((err) => {
this.props.disconnectState(err); // ACTION CALL
}
}
...
Minderer
Die kurze Version ist, dass etwas den Zustand Ihrer Anwendung ständig ändert. Es ist schwer zu sagen, was genau, ohne Ihren Reducer zu sehen, aber Sockets würden regelmäßig Daten senden (am Leben bleiben oder etwas anderes). Sie möchten wahrscheinlich nur den Status ändern, wenn etwas Interessantes über den Socket kommt. –
danke @RobDrimmie. Ich dachte, dass sich eine Komponente nur ändert, wenn sich der Zustand ändert, und Teile neu rendert, die neu gerendert werden müssen? P.S. Der Connected State muss dabei bleiben und ist interessant, weil wir einen Chat aufbauen. Wir möchten also die Sperrung von Benachrichtigungen und der Benutzeroberfläche, wenn die Verbindung getrennt wurde. – radosch
Sie haben Recht, dass die render() - Funktion einer Komponente nur aufgerufen wird, wenn sich der Status ändert. Da dein Name oft aufgerufen wird, ändert sich der Zustand sehr. Es ist schwierig, darüber zu spekulieren, was sich im Status ändert, ohne Ihre Socket-Handling-Funktionen oder den Reducer zu sehen. Ich spekuliere, dass alles, was mit der Steckdose zu tun hat, für den sich ständig ändernden Zustand verantwortlich ist. –