antd 中的 Upload 和 Select结合出现的问题,选择导入,点击文字才触发Upload的事件
时间: 2024-03-21 13:38:20 浏览: 97
这个问题可能是因为上传组件和 Select 组件在同一个 div 内,导致点击 Select 组件的时候触发了上传组件的点击事件。可以尝试将 Upload 组件和 Select 组件分别放在不同的 div 中,以便避免这个问题的发生。
以下是一个示例代码,演示如何将 Upload 组件和 Select 组件放在不同的 div 中:
```jsx
import { Upload, Select } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
const { Option } = Select;
class FileUploader extends React.Component {
state = {
fileList: [],
};
handleUpload = (info) => {
let fileList = [...info.fileList];
fileList = fileList.slice(-10); // 只展示最近上传的10个文件
fileList = fileList.map(file => {
if (file.response) {
// 服务器返回的响应中包含了文件的下载链接
file.link = file.response.link;
}
return file;
});
this.setState({ fileList });
};
render() {
const { fileList } = this.state;
return (
<div>
<div>
<Upload
action="/upload"
beforeUpload={(file) => {
const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';
if (!isJpgOrPng) {
message.error('只能上传 JPG/PNG 格式的图片!');
}
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
message.error('文件大小不能超过 2MB!');
}
return isJpgOrPng && isLt2M;
}}
onChange={this.handleUpload}
fileList={fileList}
>
<Button icon={<UploadOutlined />}>上传文件</Button>
</Upload>
</div>
<div>
<Select
mode="multiple"
style={{ width: '100%' }}
placeholder="请选择要下载的文件"
>
{fileList.map(file => (
<Option key={file.uid} value={file.link}>
{file.name}
</Option>
))}
</Select>
</div>
</div>
);
}
}
```
在上面的代码中,我们将 Upload 组件和 Select 组件分别放在了两个 div 中,以便避免它们之间的点击事件冲突。
阅读全文