这是官方阿里云上传的例子。
这是我代码中遇到的只监听一次上传状态的解答
我在onChange
方法中打印了fileList
有值,onChange
是undefined
,fileList
是文件上传的状态是肯定有值的,但是onChange
要在下面做判断为什么会是未定义呢?
因为这个未定义所以进不到if
判断中从而无法更新fileList
就导致了在onChange
方法中只监听到了上传的一次状态(status: "uploading"),之后的(status: "done")就监听不到了,请求大佬解惑!
附上相关代码:
class ShopUnitDialog extends Component {
...
imgChange = ({fileList}) => {
const { onChange } = this.props
console.log('Aliyun OSS:', fileList, onChange) // fileList有值,但是只能监听到一次,onChange未定义
if (onChange) {
onChange([...fileList])
}
}
...
render () {
const { value } = this.props
const upload = {
name: 'file',
listType: 'picture',
fileList: value,
action: ossData.host,
data: this.getExtraData,
beforeUpload: this.beforeUpload
}
const img_upload = {
onChange: this.imgChange,
...upload
}
return (
<Form>
<Item label='上传照片'>
{getFieldDecorator('shop_door')(
<Upload {...img_upload}>
<div>
<img src={UploadImg} alt='上传' width='104' height='78' />
</div>
</Upload>
)}
</Item>
</Form>
)
}
}
const ShopUnitD = Form.create({})(ShopUnitDialog);
export default ShopUnitD
问题好像解决了一半,因为例子里面上传参数的
fileList
是从this.props
里面的value
值来定义的,即这个const { value } = this.props
,我也不知道为什么这样写,因为我父组件根本没有定义。然后解决的办法是我将这个
value
在父组件里面定义好了,按照这个格式来定义的然后在上传的
onChange
方法里面将fileList
的值又重新同步到父组件定义的那个值就可以监听到后续的(status: "done")
了。问题解决了只是有两个问题还是不太懂:
const { value } = this.props
的value
来定义fileList
。if (onChange)
判断但是我打印这个onChange
又没有值。