返回
突破地域界限,三级联动选择器实现动态数据展示!
前端
2024-01-12 11:45:37
小程序的开发中,Picker 组件是构建用户界面时常用的选择器组件之一。它可以很便捷地帮助我们实现省市区、日期时间、多列选择器等。今天,我们将更进一步,实现一个动态数据的多列选择器。
在这个例子中,我们将实现一个购车门店选择器,用户可以按省市区三级联动方式选择购车门店。实现步骤如下:
- 省级数据查询。 用户点击选择购车门店按钮,首先需要查询省级地区数据。我们可以使用 Taro 的 useRequest() 方法来发起网络请求,并将获取的省级数据存储在 state 中。
- 市级数据查询。 用户选择省级地区后,需要查询该省下的市级数据。同样,我们可以使用 useRequest() 方法发起网络请求,并将获取的市级数据存储在 state 中。
- 门店数据查询。 用户选择市级地区后,需要查询该市下的门店数据。与之前类似,我们可以使用 useRequest() 方法发起网络请求,并将获取的门店数据存储在 state 中。
- Picker 组件渲染。 将省级、市级、门店数据分别渲染到三个 Picker 组件中,即可实现三级联动选择器。
在实际开发中,我们可以根据具体需求对 Picker 组件进行样式调整,并添加一些额外的功能,如搜索功能、数据缓存等,以提升用户体验。
下面是实现代码示例:
import Taro, { useRequest } from '@tarojs/taro'
function StoreSelector() {
const [provinces, setProvinces] = useState([])
const [cities, setCities] = useState([])
const [stores, setStores] = useState([])
const [selectedProvince, setSelectedProvince] = useState('')
const [selectedCity, setSelectedCity] = useState('')
useEffect(() => {
fetchProvinces()
}, [])
useEffect(() => {
if (selectedProvince) {
fetchCities(selectedProvince)
}
}, [selectedProvince])
useEffect(() => {
if (selectedCity) {
fetchStores(selectedCity)
}
}, [selectedCity])
const fetchProvinces = () => {
const [res] = await useRequest('/provinces')
if (res.code === 0) {
setProvinces(res.data)
}
}
const fetchCities = (province) => {
const [res] = await useRequest(`/cities/${province}`)
if (res.code === 0) {
setCities(res.data)
}
}
const fetchStores = (city) => {
const [res] = await useRequest(`/stores/${city}`)
if (res.code === 0) {
setStores(res.data)
}
}
const onProvinceChange = (e) => {
setSelectedProvince(e.detail.value)
}
const onCityChange = (e) => {
setSelectedCity(e.detail.value)
}
const onStoreChange = (e) => {
// 选择门店后的逻辑处理
}
return (
<View>
<Picker mode="selector" range={provinces} onChange={onProvinceChange} value={selectedProvince}>
<View className="picker">省</View>
</Picker>
<Picker mode="selector" range={cities} onChange={onCityChange} value={selectedCity}>
<View className="picker">市</View>
</Picker>
<Picker mode="selector" range={stores} onChange={onStoreChange}>
<View className="picker">门店</View>
</Picker>
</View>
)
}
export default StoreSelector
通过这种方式,我们就可以在小程序中实现动态数据展示的三级联动选择器,使