为了账号安全,请及时绑定邮箱和手机立即绑定

Redux 中的订阅 Redux 中订阅的奇怪行为

Redux 中的订阅 Redux 中订阅的奇怪行为

梵蒂冈之花 2022-01-07 20:46:38
我现在正在学习redux。下面共享的代码独立于 React,因此不考虑 React 集成。下面是 redux-basics.js,它有Reducer、Store、Action 和 Subscription部分const redux = require('redux');const createStore =  redux.createStore;// Note : Store Creation is actually dependent on Reducer Thats why reducer must be created first.// Reducerconst initialState = {  counter : 0}const rootReducer = (state = initialState,action) => {     if(action.type === 'INCR_COUNTER'){         return  {  ...state,             counter : state.counter + 1 }     }     if(action.type === 'ADD_COUNTER'){        return  {  ...state,            counter : state.counter + action.value }    }    return state;}// Store const store = createStore(rootReducer);console.log(store.getState())// Subscriptionstore.subscribe(() => {    console.log(" SUbscription " , store.getState()  );})// Despatching an Action store.dispatch({type : "INCR_COUNTER"});store.dispatch({type: "ADD_COUNTER", value : 10});console.log(store.getState());然后我得到如下输出(这是正确的!):Ps-MBP:redux--01-start pramod$ node redux-basics.js { counter: 0 } SUbscription  { counter: 1 } SUbscription  { counter: 11 }{ counter: 11 }但是,当我将侦听器移到调度方法下方时,订阅将不起作用?我正在尝试我缺少的东西,或者为什么会这样?我正在做的代码如下:(我以为它会打印订阅方法输出,但事实并非如此)// Despatching an Action store.dispatch({type : "INCR_COUNTER"});store.dispatch({type: "ADD_COUNTER", value : 10});// Subscriptionstore.subscribe(() => {    console.log(" SUbscription " , store.getState()  );})console.log(store.getState())进行上述代码转换后,代码输出如下:Pramod:redux--01-start pramod$ node redux-basics.js { counter: 0 }{ counter: 11 }任何提示/想法为什么会这样?
查看完整描述

1 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

您在添加订阅侦听器之前调度操作。代码按顺序执行,因此当流程到达动作调度部分时,没有定义用于输出状态的订阅。


查看完整回答
反对 回复 2022-01-07
  • 1 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信