发现老师的写法有点消耗心能改进了一下。

发现老师的写法有点消耗心能改进了一下。

getListInfoSucc=res=>{

        this.setState({

            list:res.data.data,

        })

    }

    componentDidMount(){

        let id=this.props.match.params.id;

        id=id?id:1;

        this.currentId=id;

        axios.get('http://www.dell-lee.com/react/api/list.json?id='+id)

            .then(this.getListInfoSucc)

    }

    

    componentWillReceiveProps(next){

        let nextId=next.match.params.id;

        if(this.currentId===nextId)return;

        this.currentId=nextId

        axios.get('http://www.dell-lee.com/react/api/list.json?id='+this.currentId)

            .then(this.getListInfoSucc)

    }

改动就这三处,老师看看能不能改进一下。

还有就是最开始this.currentId这个变量我写在this.state里面,后面发现直接写this.currentId把他挂在类上也可以。我记得这种写法是在构建函数里面的用法,在类中像这种我们都写在constructor中的吧?这样写可以吗?这样写与写在this.state中的区别是什么?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
慕课网的粉 2020-06-13 14:33:33

你这样改是行的,但是没必要。ES6 的类,完全可以看作构造函数的另一种写法,所以直接使用this.state和写在constructor中没啥大的区别 =.= 

提问者 功不唐捐终入海 2020-06-13 11:17:07

这样写发现一个BUG不知道为什么。。

改进后的代码下,当网址为3000的时候发送的ajax请求时?id=1.但是我点击第一个item慢速英语的时候他还是会发送一次Ajax请求这是为什么了?按理说当我第一次挂载的时候,currentId就等于1了。点击第一个ITEM他的id也为1,应该返回不执行Ajax的!!!

  • 提问者 功不唐捐终入海 #1
    这个Bug知道了因为最开始的时候我赋值为id=id?id:1;导致他是一个Number类型,而Id是一个String类型不能全等。
    2020-06-13 11:45:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师