react-vant 使用
react-vant 是vantUI针对react的UI版本,可以帮助我们搭建react移动端页面
安装:npm install react-vant
list组件使用
import { List } from 'react-vant';
例子
/* eslint-disable react/no-array-index-key */
import React, { useState } from 'react'
import { PullRefresh, List, Tabs, Cell } from 'react-vant'
import './style.less'
// 模拟异步请求
async function getData(throwError?) {
return new Promise<number[]>((resolve, reject) => {
setTimeout(() => {
if (throwError) {
reject(new Error('error'))
}
resolve(Array.from({ length: 10 }, (_, i) => i))
}, 2000)
})
}
// 基础用法
const BaseDemo = () => {
const [list, setList] = useState<Array<number>>([])
const [finished, setFinished] = useState<boolean>(false)
const onLoad = async () => {
const data = await getData()
setList(v => [...v, ...data])
if (list.length >= 30) {
setFinished(true)
}
}
return (
<List finished={finished} onLoad={onLoad}>
{list.map((_, i) => (
<Cell key={i} title={i + 1} />
))}
</List>
)
}
// 错误提示
const ErrorDemo = () => {
const [list, setList] = useState<Array<number>>([])
const [finished, setFinished] = useState<boolean>(false)
const [count, setCount] = useState(0)
const onLoad = async () => {
setCount(v => v + 1)
const data = await getData(count === 1)
setList(v => [...v, ...data])
if (list.length >= 30) {
setFinished(true)
}
}
return (
<List
finished={finished}
errorText='请求失败,点击重新加载'
onLoad={onLoad}
>
{/* 若 onLoad 抛出错误,将显示错误提示,用户点击错误提示后会重新触发 onLoad 事件 */}
{list.map((_, i) => (
<Cell key={i} title={i + 1} />
))}
</List>
)
}
// 下拉刷新
const PullRefreshDemo = () => {
const [list, setList] = useState<Array<number>>([])
const [finished, setFinished] = useState<boolean>(false)
const onLoadRefresh = async (isRefresh?) => {
const data = await getData()
setList(v => {
const newList = isRefresh ? data : [...v, ...data]
if (newList.length >= 30) {
setFinished(true)
}
return newList
})
}
const onRefresh = async () => {
setFinished(false)
await onLoadRefresh(1)
}
return (
<PullRefresh onRefresh={onRefresh}>
{/* List 组件可以与 PullRefresh 组件结合使用,实现下拉刷新的效果 */}
<List finished={finished} onLoad={onLoadRefresh}>
{list.map((_, i) => (
<Cell key={i} title={i + 1} />
))}
</List>
</PullRefresh>
)
}
export default () => (
<div className='demo-list'>
<Tabs sticky>
<Tabs.TabPane title='基本用法'>
<BaseDemo />
</Tabs.TabPane>
<Tabs.TabPane title='错误提示'>
<ErrorDemo />
</Tabs.TabPane>
<Tabs.TabPane title='下拉刷新'>
<PullRefreshDemo />
</Tabs.TabPane>
</Tabs>
</div>
)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具