微信JsSdk获取本地图片不执行React的setState

通过微信JsSdk获取本地图片但是不能执行this.setState更新数据

    var localData="";
    wx.chooseImage({
        count: 1, // 默认9
        sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
        sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
        success: function (res) {
             var localIds = res.localIds[0]; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
             wx.getLocalImgData({
                localId:localIds, // 图片的localID
                success: function (res) {
                    localData = res.localData; // localData是图片的base64数据,可以用img标签显示
                    if(window.__wxjs_is_wkwebview){
                        message.success("IOS")
                        localData = localData.replace('jgp', 'jpeg');
                    }else {
                        message.success("Android")
                        localData = 'data:image/jpeg;base64,'+localData;
                    }
                    if(type == 'front'){
                        message.success("进入正面异步更新")
                            this.setState({
                                front:localData
                            }),()=>{
                                message.success("正面更新完成!")
                            }
                    }else {
                        message.success("进入背面异步更新")
                        this.setState({
                            back:localData
                        })
                    }
                },
            });
        }
    });

Log显示执行到message.success("进入正面异步更新")就没有了

阅读 2.2k
2 个回答
✓ 已被采纳新手上路,请多包涵

已解决
由于wx.*内this已经改变直接this.setState是找不到此方法的,修改如下

    var that=this;
    wx.chooseImage({
        count: 1, // 默认9
        sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
        sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
        success: function (res) {
             var localIds = res.localIds[0]; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
             wx.getLocalImgData({
                localId:localIds, // 图片的localID
                success: function (res) {
                    var localData = res.localData; // localData是图片的base64数据,可以用img标签显示
                    if(window.__wxjs_is_wkwebview){
                        localData = localData.replace('jgp', 'jpeg');
                    }else {
                        localData = 'data:image/jpeg;base64,'+localData;
                    }
                    if(type == 'front'){
                        that.setState({
                                front:localData
                            })
                    }else {
                        that.setState({
                            back:localData
                        })
                    }
                },
            });
        }
    });
新手上路,请多包涵

你的这个好使了吗?你用到了js-sdk的图像接口了吗?上传图片返回无效id遇到了吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题