我有一個奇怪的行爲。一旦將套接字連接添加到react/redux系統,一旦分派下一個Action,我的主要組件總是會被重新渲染。Redux // React組件在動作調度後渲染兩次
我也有這種行爲,當我再次點擊一個導航鏈接(調度相同的路由動作), compoenent也rerenders,即使我留在同一頁面。
任何人都可以幫助我走上正軌嗎? 非常感謝!
設置 反應0.15.x 終極版 反應路由器V4 反應路由器-終極版
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
}
}
...
減速
簡短的版本是,不斷變化你的應用程序的狀態。很難說沒有看到你的reducer,但套接字會經常發送數據(保持活躍或其他)。你可能只想在socket感興趣的時候改變狀態。 –
感謝@RobDrimmie。我認爲一個組件只有在狀態改變時纔會改變,並且只重新渲染那些需要重新渲染的組件。 P.S.連接狀態必須堅持並且很有趣,因爲我們正在建立聊天。所以我們希望在斷開連接時通知和UI鎖定。 – radosch
你是正確的,一個組件的render()函數只會在狀態改變時被調用。由於你的名字變得很多,國家正在改變很多。如果沒有看到你的套接字處理函數或reducer,很難推測什麼是狀態改變。我在猜測,無論處理套接字是否對不斷變化的狀態負責。 –