Redux配置store、reducer、Provider均正常,useSelector返回undefined原因排查
问题根因
你编写的counterReducer缺少默认返回分支:
Redux 初始化阶段会自动触发内置的@@INIT类型动作,该动作不会匹配你代码中写的increment、decrement两个判断条件,此时 reducer 没有返回任何值,导致全局 state 被初始化为 undefined,所以useSelector读取时拿到的就是 undefined。
修复方案
在redux.js的counterReducer末尾添加默认返回原 state 的逻辑即可,修复后代码如下:
import {createStore} from 'redux' const counterReducer = (state = {counter:0}, action)=>{ if(action.type ==='increment'){ return {counter:state.counter+1} } if(action.type ==='decrement'){ return{counter : state.counter-1} } // 新增默认返回逻辑,不匹配的action直接返回原有state return state } const store = createStore(counterReducer); export default store;
补充说明
Redux 要求 reducer 是纯函数,任何输入场景下都必须返回合法的 state 值,禁止无返回值的情况,否则就会出现state被重置为undefined的问题。
内容的提问来源于stack exchange,提问作者Parviz Pirizade
相关产品推荐
相关产品推荐

