react组件upload上传成功,但是图片不显示问题

有这样一种情况,使用了antd组件库中的upload上传组件,添加图片,NetWork中显示upload成功,但是页面没有图片的展示,有一种情况是onchange事件只触发一次的情况,fileList不更新,
我遇到的情况是将fileList属性写入了upload组件,在state中之前定义好了fileList,只存了一次,并没有更新,我并没有使用onchange事件,而是使用了getValueFromEvent 这个方法可以拿到onchange事件的值,比原始组件库写的方法好的多,getFieldUrl获取 file中的response 再拿到图片的url地址

//获取真实图片地址
 getFileUrl = res => {
        const file = res.file;
        if (
            file &&
            file.response &&
            file.response.data &&
            file.response.data.length > 0
        ) {
            return file.response.data[0].file_url;
        } else {
            return '';
        }
    }
    beforeUpload = file => {
        const isJpgOrPng =
            file.type === 'image/jpeg' ||
            file.type === 'image/jpg' ||
            file.type === 'image/png';
        if (!isJpgOrPng) {
            message.error('上传类型错误jpg png格式');
            return false;
        }
        const limit = file.size < 5 * 1024 * 1024;
        if (!limit) {
            message.error('图片不能大于5M');
            return false;
        }
        return new Promise((resolve, reject) => {
            if (!isJpgOrPng && limit) {
                reject(file);
            } else {
                resolve(file);
            }
        });
    };

//页面展示

                    {getFieldDecorator('catImg', {
                        rules: [
                          {
                            required: true,
                            message: '请添加分类图片'
                          }
                        ],
                      getValueFromEvent: this.getFileUrl
                    })(
                      
                        {getFieldValue('catImg') ? (
                          avatar
                        ) : (
                            uploadButton
                          )}
                      
                    )}
                    

支持扩展名jpg/png,尺寸100*100

添加的时候,首次上传图片是没问题的,但是当编辑的时候,想要替换图片,发现请求了upload的接口,但是页面的图片没显示。


image.png
image.png

image.png

出现上图的提示报错是因为没加valuePropName属性,添加就好了
// valuePropName: 'fileList', 但是图片仍然不显示,这是因为当前上传图片类型只是单个file,将fileList改成file就解决了


                    {getFieldDecorator('catImg', {
                        rules: [
                          {
                            required: true,
                            message: '请添加分类图片'
                          }
                        ],
                      getValueFromEvent: this.getFileUrl,
                      valuePropName: 'file'
                    })(
                      
                        {getFieldValue('catImg') ? (
                          avatar
                        ) : (
                            uploadButton
                          )}
                      
                    )}
                    

支持扩展名jpg/png,尺寸100*100

最终总结:
使用getFormEvent代替onchange事件,如果点击上传只有一张图片的情况下,添加属性valuePropName='file' ,如果上传图片列表,添加属性valuePropName='fileList'

你可能感兴趣的:(react组件upload上传成功,但是图片不显示问题)