2017-05-09 54 views
1

哎呀,我覺得愚蠢關於這一點,但我看過的每一個部分:http://redux.js.org/(做了理論家的教程,並在閱讀4次FAQ:http://redux.js.org/docs/faq/ImmutableData.htmlRedux會在每次分派操作時執行所有訂閱回調?

我所做的是存根我減速的一個,總是返回狀態,這是唯一被調用的reducer(用斷點檢查)即使如此,我的訂閱事件每次reducer返回狀態都會被調用,我不明白什麼?(Action.SetServerStats以1Hz的速率調用,並且訂閱也被稱爲1Hz Rate

BTW Chrome Redux Extension表示狀態是相同的,並且React Extension for Chrome with Trace React Updates ,沒有顯示任何更新。

當有人給我提供線索時,我會很高興刪除這個問題。但是現在,我看到每個減速器都以1Hz被調用,並且他們都返回了他們獲得的商店的切片(州)。

所以我不明白訂閱,並且它返回每個偶數當商店樹沒有得到修改的時間(這是由反應,終極版做淺比較弄清楚如果有的話是什麼改變了?)

創造店&訂閱

let store = createStore(reducer, initialState, composeWithDevTools(applyMiddleware(thunk))) 
store.subscribe(() => console.log("current store: ", JSON.stringify(store.getState(), null, 4))) 

reducers.js

import A from './actionTypes' 
import { combineReducers } from 'redux' 

export const GLVersion = (state = '', action) => { 
    switch (action.type) { 
     case A.SetGLVersion: 
      return action.payload 
     default: 
      return state 
    } 
} 

export const ServerConfig = (state = {}, action) => { 
    switch (action.type) { 
     case A.SetServerConfig: { 
      let { ServerPort, UserID, PortNumber, WWWUrl, SourcePath, FMEPath } = action.payload 
      let p = { ServerPort, UserID, PortNumber, WWWUrl, SourcePath, FMEPath } 
      return p 
     } 
     default: 
      return state 
    } 
} 

export const ServerStats = (state = {}, action) => { 
    switch (action.type) { 
     case A.SetServerStats: 
      return state 
     // let { WatsonInstalled, WatsonRunning, FMERunning, JobsDirSize } = action.payload 
     // let s = { WatsonInstalled, WatsonRunning, FMERunning, JobsDirSize } 
     // return s 
     default: 
      return state 
    } 
} 

export default combineReducers({ GLVersion, ServerConfig, ServerStats }) 

回答

2

正確。 Redux將每調用一次執行所有訂閱回調,即使狀態未以任何方式更新。這需要訂閱回調,然後執行一些有意義的操作,例如調用getState()並檢查狀態的某個特定部分是否已更改。

React-Redux就是一個例子。連接組件類的每個實例都是商店的單獨訂閱者。每次分派操作時,connect生成的所有包裝組件都將首先檢查以查看根狀態值是否已更改,如果是,請運行mapStateToProps函數,以查看mapState的輸出是否完全改變。 如果mapState輸出發生變化,則包裝器組件將重新呈現您的「真實」組件。

您可能想閱讀我的博文Practical Redux, Part 6: Connected Lists, Forms, and Performance,其中討論了與Redux性能相關的幾個重要方面。我的新帖子Idiomatic Redux: The Tao of Redux, Part 1 - Implementation and Intent也詳細介紹了Redux的幾個部分如何工作。

相關問題