React setStats数组不更新,百思不得其解。

楼楼今日遇到个坑爹的问题。 就是 this.setStats({}) 对 this.stats 不更新问题

问题是这样的

 constructor(props) {
        super(props);
        this.state = {
            imageList: []
        }

        WechatService.getMaterialOrealList("image").then((result) => {
            this.setState({
                imageList: result
            })
        });

    }
    
     async handleInputChangeUpload(event) {
        var target = event.target;
        var file = target.files[0];

        var formData = new FormData();
        formData.append('file', file);

        var result = await WechatService.updateMaterialImage(formData);

        var lists = this.state.imageList;
        lists.push(result);
        console.log(lists);
        //同步更新
        this.setState((prevState, props) => ({
            imageList: lists
        }))

    }
复制代码

数组的长度已经变成了11可是 render 并没有更新!!,这是为什么呢? 此方法已经是谷歌出来的东西,可是好像并没有成功

 this.setState((prevState, props) => ({
           imageList: lists
       }))
复制代码

但是楼主看了一下elementsUI 的代码后进行一次修改后,发现一下方案倒是成功了。百思不得其解,不知道那位小兄弟可以解答一下。

constructor(props) {
       super(props);
       this.state = {
       //这是把数组用一个对象包含起来
           data: {
               imageList: []
           }
       }
   }

   componentWillMount() {
       WechatService.getMaterialOrealList("image").then((result) => {
           this.setState({
               data: Object.assign({}, {
                   imageList: result
               })
           })
       });
   }



   handleUpload() {
       this.refs.inputFile.click();
   }

   async handleInputChangeUpload(event) {
       var target = event.target;
       var file = target.files[0];

       var formData = new FormData();
       formData.append('file', file);

       var result = await WechatService.updateMaterialImage(formData);

       var lists = this.state.data.imageList;
       lists.push(result);
       this.setState((prevState, props) => ({
       //浅拷贝、对象属性的合并
           data: Object.assign({}, { imageList: lists })
       }))

       setTimeout(() => {
           console.log(this.state.data);
       });

   }
复制代码

这样使用对象进行修改的数组变量反而更新了。

这是为什么呢? 无法解答

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值