Action 请求来的数据给了reducer,reducer执行后数据没有映射到store上是为什么?

#1

这个问题已经困扰我两天了,在segmentfault上提问过了,但是回答的人很少。我今天又补充了一些描述进去,希望了解的人能帮我看下问题到底出在哪里。这是原文链接

求助react-redux下的一个问题
#2

看了代码,感觉用法上好像有些问题,有兴趣可以看看我写的这两个示例:https://github.com/meibin08
https://github.com/meibin08

1 Like
#3

我本地基本上已经有了所有的react-redux的教学项目了,关键是我现在定位不到问题出在哪里。你能花时间来看我的问题我就很感谢了。

#4

把项目地址贴出来

#5

这是公司的项目,所以不能共享到github上。不好意思啊

#6
function mapStateToProps (state, ownProps) {
    // 这里的state打印出来的并没有我返回的数据
    console.log(state, 'state')
    return {
        uname: state.uname,
        point: state.point,
        notice: state.notice
    }
}

你的这段代码错了!state是整个store,而你贴出来的其中一个reducer是requestUserInfo;明显你的state.notice…等等路径就错了!你不是在mapStateToProps打印state了吗。直接顺着这个结构找你想要的数据即可!
提示,你写的requestUserInfo这个reducer没有初始化值(state={控对象}),所以即使上面那步:你的state路径正学,你的Header组件在第一次渲染的时候也会报错,因为根本没这个字段!有两个办法:一。在组件里面写三元
state.notice ? 如此这般 : null;(比较low,不推荐);二。在requestUserInfo的初始化state里面写上基础数据!

export const requestUserInfo = (state = {}, action) => {
    switch(action.type) {
        // 组件中直接使用的dispatch({type: 'HEADER_RECEIVE_USERINFO'})来触发
        case 'HEADER_RECEIVE_USERINFO':
            return {
                ...init
            }
            break
        default:
            return state
    }
}
#7

非常感谢你的回答,我马上去试试

#8

先看看你打印出来的state的结构跟你return的是一样的吗?

#9

不好意思,刚开会去了。在这个方法里面打印的state就只有requestUserInfo和routing这两个对象,别的就再没有了

#10

state.requestUserInfo里面没有你想要返回的数据吗?

#11

return {
uname: state.requestUserInfo.uname,
point: state.requestUserInfo.point,
notice: state.requestUserInfo.notice
}

#12

这样写就能拿到,可是我看别人的demo的时候都是直接
return { uname: state.uname, point: state.point, notice: state.notice }
就能拿到数据了,我的为什么还要加一个requestUserInfo才能拿到呢

#13

不好意思啊,昨天通宵了,没注意你的回复。

#14

在reducer里面你return 出来的那个state就是你这里接收的state,结构是一模一样的,所以你跟别人是在reducer里面return state结构不同而已,就目前你给的信息来看

#15

好的,谢谢你的回答

#17

嗯,现在已经知道了,谢谢你能回复