美文网首页
发请求失败

发请求失败

作者: 星期六1111 | 来源:发表于2017-09-27 09:15 被阅读41次

问题描述

我将一些数据封装成一个对象,目的是通过post请求将它发送到后端然后save到数据库中,但请求并未发送到后端。发送请求的逻辑如下:

export const submitComments=(comments)=>{
console.log(comments)
    return dispatch => {
        (async () => {
            const res = await request.post(`/api/practiseDiary/comments`, comments);
            if (res.status === HTTP_CODE.CREATED) {
                dispatch(getGrowthNotes());
            }
        })();
    }
};

矛盾点

我用postman测了接口,完全没有问题;在发请求之请求前完全打印要保存的对象,对象也是正确的;检查发请求的逻辑,没有发现什么问题,那么问题到底在哪?

问题解决

Q1:我在return 之上console.log(comments)可以打引出值,但是在post封装的方法里却打印不出来,为什么?
A1:打印不出来说明没有dispatch到post方法,明明有dispatch,为什么进不去post方法?怀疑可能是submitComments方法的问题有时·,submitComments方法又是怎么来的,是container里dispatch来的,找到container,my god,好像忘写dispatch了...

Q2: dispatch的是做什么的?
A2:用来action的分发,改变store里面的state。mapDispatchToProps如果传递的是一个对象,那么每个定义在该对象的函数都将被当作 Redux action creator,对象所定义的方法名将作为属性名;每个方法将返回一个新的函数,函数中dispatch方法会将action creator的返回值作为参数执行。这些属性会被合并到组件的 props 中。
我的container 如下:

const mapDispatchToProps = dispatch => ({
    submitComments: (rawId, comments) => {(actions.submitComments(rawId, comments))
    }
});

虽然actions里面的方法submitComments没有被dispach,但调用了该方法,所以return 之前的console.log才一定会被调用,但因为没有dispach,diapach 会延迟调用return 的方法,所以return的方法没有被调用,所以post方法才没有执行。。。

Q3: 加上dispatch后,请求还是发不出去?
A3:由于前后端的分离,在package.json中使用了proxy来代理后端,在package.json中已经加入了后端的路由,抱着尝试的态度重启了服务,再次尝试服务就可以发出去了。。。。原来package.json改变后需要重启服务,否则刚添加的内容并没有生效,还是找不到后端的路由,所以发送请求失败。。。

反思

被dispatch的问题卡住了,说明了两点,一是不够细心,检查了一遍还是那你没有发现。。。二是对dispatch的理解还是不够,所以在开始的时候才没有诊断出问题。。。

action

学习的时候通过5w1h的方法深入理解概念,会用是远远不够的,如果只是简单的会用,下次遇到bug,或是问题一变形,还是不知道怎么解决。。。

相关文章

网友评论

      本文标题:发请求失败

      本文链接:https://www.haomeiwen.com/subject/zueeextx.html