ReactNative开发城市列表页

作者: 南宫零三 | 来源:发表于2019-02-23 15:04 被阅读5次

首先来看看效果图对比 ScrollView和SectionList

需求

> 页面包含当前定位,热门城市,全国的城市列表。其中全国城市列表页带字母分类,右侧带有字母索引

讲道理,要完成这个需求,我能想到的是城市列表如何实现?ScrollView、FlatList、SectionList。

当然经过思考后,首先想到的是用SectionList来完成,所以第一版出来的效果是SectionList组件完成的页面。但是,这时候遇到了个问题,因为全国城市的数量过多,在SectionList渲染完可视的页面后,点击右侧索引跳转到对应的字母区域的滚动效果不太好,而且会有空白的渲染问题。

不过在使用支付宝APP的里面定位功能时候,加载和跳转索引都非常流畅,我就好奇是怎么实现的了。肯定不是使用SectionList,Google后相关资料后尝试了用ScrollView做了第二版,最后的结果如支付宝的组件版顺畅。

ScrollView版的城市列表

首先看页面布局,全国城市列表的数据自己查找一份,数据格式自己处理了一遍,大概是这个格式。之所以转化成这样是因为第一版用SectionList的数据源必须是这种格式,包含key和data(必须是这个名字)

> 城市列表JSON数据图片

页面布局的代码如图

> 页面布局代码

详细的参考代码去吧,接下来聊聊实现思路

开发思路

1. 获取字母表头(索引数组)

我们可以通过遍历来获取大写字母

```

_gotLettersArray() {

let LettersArray = []

for (let i = 0; i < cityDatas.length; i++) {

let element = cityDatas[i];

LettersArray.push(element.title)

}

return LettersArray

}

```

2. 获取每个字母区域的高度

首先定义一个空数组用于存放每个字母区域的高度,其次初始化一个变量,其值与没个城市列表的高度相同,最后遍历得到没个区域的高度并将其放进去,这样便得到一个完整的储存高度的数组了

```

_gotTotalHeightArray() {

let totalArray = []

for (let i = 0; i < cityDatas.length; i++) {

let eachHeight = ROW_HEIGHT * (cityDatas[i].data.length + 1);

totalArray.push(eachHeight);

}

return totalArray

}

```

3. 点击右侧字母自动滑动到相应位置

当我们点击右侧字母时进入点击事件,通过scrollTo()使页面跳转到相应下标的高度上去。

```

scrollToList(item, index) {

let position = 0;

for (let i = 0; i < index; i++) {

position += totalHeight[i]

}

this.refs.ScrollView.scrollTo({y: position})

}

```

最后

这就是用ScrollView完成的城市列表,相对来说简单多了,而且体验也更好,更多请参考代码

GitHub地址

相关文章

  • ReactNative开发城市列表页

    首先来看看效果图对比 ScrollView和SectionList 需求 > 页面包含当前定位,热门城市,全国的城...

  • ReactNative实现城市选择列表

    引言 使用RN开发了一段时间,最近遇到了一个比较棘手的问题,就是用react写个城市选择列表,当然这个如果用And...

  • 第三天

    drf开发商品列表页 django的view实现商品列表页&自带的serializer cbv => class ...

  • 期末作业

    概述 开发一个简单的电影列表,源代码详见链接:http://reactnative.cn/docs/0.37/sa...

  • 开发资料

    开源ReactNative项目列表 学习资料-书籍 iOS文章列表 iOS开源列表 Awesome iOS A c...

  • ReactNative混合开发-4 使用svg图片

    开发语言:ReactNative 0.59.5开发环境:VSCode 我们可以在ReactNative中使用SVG...

  • vue中keepAlive的用法[返回页面不刷新]

    使用vue单页开发项目时遇到一个问题:在列表页进入详情页,按返回键返回列表页时页面刷新了,用户体验非常差啊!!!查...

  • 手把手教你写电商后台管理系统(七) - 用户模块

    1 基础功能模块的开发 1.1 登录页 1.2 登录状态管理 1.3 用户列表页 1.4 首页的开发 1.5 错误...

  • 2018-11-24

    1、早起、写日志 2、加班完成列表页所有功能的开发 列表页仍旧剩转门店、审核、以及对应的批量操作没有完成。详细页还...

  • uniapp带参返回上一页功能实现

    在uniapp开发过程中经常会遇到这种情况:列表页面A点击item进入详情页B,详情页B进行操作后返回A列表页并从...

网友评论

    本文标题:ReactNative开发城市列表页

    本文链接:https://www.haomeiwen.com/subject/idlpyqtx.html