--- order: 3 title: zh-CN: 照片墙 en-US: Pictures Wall --- ## zh-CN 用户可以上传图片并在列表中显示缩略图。当上传照片数到达限制后,上传按钮消失。 ## en-US After users upload picture, the thumbnail will be shown in list. The upload button will disappear when count meets limitation. ```tsx import React, { useState } from 'react'; import { Upload, Modal } from 'antd'; import { PlusOutlined } from '@ant-design/icons'; import type { UploadFile } from 'antd/es/upload/interface'; import type { RcFile, UploadProps } from 'antd/es/upload'; const getBase64 = (file: RcFile): Promise => new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = () => resolve(reader.result as string); reader.onerror = error => reject(error); }); const App: React.FC = () => { const [previewVisible, setPreviewVisible] = useState(false); const [previewImage, setPreviewImage] = useState(''); const [previewTitle, setPreviewTitle] = useState(''); const [fileList, setFileList] = useState([ { uid: '-1', name: 'image.png', status: 'done', url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', }, { uid: '-2', name: 'image.png', status: 'done', url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', }, { uid: '-3', name: 'image.png', status: 'done', url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', }, { uid: '-4', name: 'image.png', status: 'done', url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', }, { uid: '-xxx', percent: 50, name: 'image.png', status: 'uploading', url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', }, { uid: '-5', name: 'image.png', status: 'error', }, ]); const handleCancel = () => setPreviewVisible(false); const handlePreview = async (file: UploadFile) => { if (!file.url && !file.preview) { file.preview = await getBase64(file.originFileObj as RcFile); } setPreviewImage(file.url || (file.preview as string)); setPreviewVisible(true); setPreviewTitle(file.name || file.url!.substring(file.url!.lastIndexOf('/') + 1)); }; const handleChange: UploadProps['onChange'] = ({ fileList: newFileList }) => setFileList(newFileList); const uploadButton = (
Upload
); return ( <> {fileList.length >= 8 ? null : uploadButton} example ); }; export default App; ```