鍍金池/ 問答/HTML/ 關于ant.design中upload組件的setState導致請求中斷的問題?

關于ant.design中upload組件的setState導致請求中斷的問題?

  1. 用ant.design寫了一個表單發(fā)現(xiàn)上傳組件的請求總是被莫名中斷,導致圖片無法上傳。
  2. 調(diào)試后發(fā)現(xiàn)組件的setSteta({ loading: true })方法導致了組件的unmount,導致了請求的abort
  3. 組件的狀態(tài)在監(jiān)聽的upload的onchange事件,注釋掉onchange事件,問題得以解決
  4. 但是不能再onchange里面改變狀態(tài)(或者使用redux等狀態(tài)管理時觸發(fā)一個action),明顯不太合理
  5. 代碼如下(其實就是按照官網(wǎng)給的列子寫的:https://ant.design/components...),在線demo:https://codesandbox.io/s/wopv...:
import React from 'react';
import ReactDOM from 'react-dom';

import { Upload, Form, Icon } from 'antd';

function getBase64(img, callback) {
    const reader = new FileReader();
    reader.addEventListener('load', () => callback(reader.result));
    reader.readAsDataURL(img);
}

class AddBookForm extends React.Component {
    state = {
        loading: false,
    };

    handleChange = (info) => {
        console.log(info)
        if (info.file.status === 'uploading') {
            this.setState({ loading: true });
            return;
        }
        if (info.file.status === 'done') {
            // Get this url from response in real world.
            getBase64(info.file.originFileObj, imageUrl => this.setState({
                imageUrl,
                loading: false,
            }));
        }
    }

    render() {
        const formItemLayout = { labelCol: { xs: 24, sm: 2 }, wrapperCol: { xs: 24, sm: 8 } };
        const FormItem = function(props) {
            return <Form.Item {...formItemLayout} {...props}></Form.Item>;
        };
        const uploadButton = (
            <div>
                <Icon type={this.state.loading ? 'loading' : 'plus'} />
                <div className="ant-upload-text">Upload</div>
            </div>
        );
        const imageUrl = this.state.imageUrl;

        return (
            <Form layout="horizontal">
                <FormItem label="圖片" extra="請上傳2M以內(nèi)的JPG圖片">
                        <Upload
                            name='imageFile'
                            action="/api/image-upload"
                            onChange={this.handleChange}
                            showUploadList={false}
                            listType="picture-card"
                            className="single-image-uploader"
                        >
                            {imageUrl ? <img src={imageUrl} alt="" /> : uploadButton}
                        </Upload>
                </FormItem>
            </Form>
        );
    }
}

ReactDOM.render((
    <AddBookForm />
), document.getElementById('root'));

這個問題已經(jīng)困擾了我非常久的時間,請各位大神指導一下如何解決這個問題。

回答
編輯回答
久愛她

每一次onChange都要執(zhí)行setState。
參考

2017年8月16日 03:57