私は奇妙な動作があります。 react/reduxシステムにソケット接続を追加すると、次のアクションが送出されるとすぐにメインコンポーネントが常に再レンダリングされます。Redux // React Componentはアクションディスパッチ後に2回レンダリングします
また、ナビゲーションリンク(同じルーティングアクションをディスパッチ)を再度クリックすると、同じページ上にある場合でも、同じ場所にある コンペンセントも再レンダリングされます。
私はここで軌道に乗るのを手伝ってもらえますか? ありがとう!
セットアップ は0.15.x Reduxの 反応し、ルータのV4 反応 - ルータ - Reduxの
コンテナのapp.jsxとApp構造反応:
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
}
}
...
減速
短いバージョンでは、アプリケーションの状態が常に変化しています。減速機を見ずに正確に何を言うのは難しいですが、ソケットは定期的にデータを送信しています(生きているかどうかなど)。何か興味深いことがソケットを横切って来たときだけ状態を変えたいと思うかもしれません。ありがとう@RobDrimmie。 –
私は、状態が変わるとコンポーネントだけが変化し、再レンダリングが必要な部品も再レンダリングすると思ったのですか? S.私たちはチャットを構築しているので、接続された状態は固執して面白いです。私たちはあなたが切断されたときに、通知とUIロックを必要とします。 – radosch
コンポーネントのrender()関数は、状態が変更されたときにのみ呼び出されるということは間違いありません。あなたのことがたくさん呼び出されているので、国家は大きく変化しています。あなたのソケットハンドリング関数やレデューサーを見ずに状態の変化を推測するのは難しいです。私は、ソケットを扱っているものは常に変化する状態に責任があると推測しています。 –