没有合适的资源?快使用搜索试试~ 我知道了~
antd-mobile ListView长列表的数据更新遇到的坑
1 下载量 96 浏览量
2020-10-15
11:10:57
上传
评论
收藏 56KB PDF 举报
温馨提示
试读
2页
主要介绍了antd-mobile ListView长列表的数据更新遇到的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
资源推荐
资源详情
资源评论
antd-mobile ListView长列表的数据更新遇到的坑长列表的数据更新遇到的坑
主要介绍了antd-mobile ListView长列表的数据更新遇到的坑,文中通过示例代码介绍的非常详细,对大家的学习或者
工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
遇到的问题遇到的问题
listView这个组件我真的是看文档看得脑壳疼。好不容易看文档写完长列表数据展示了。然后遇到一个需求,即用户有一个点赞操
作,问题出现了,点赞完数据更新之后listView不刷新列表。
解决列表不刷新问题解决列表不刷新问题
官方的demo里有这么一个函数 rowHasChanged ,这个函数返回true或者false,如果是true,则认为这行数据改变了,然后刷新这行
数据,也就更新了列表。
// 官方
constructor(props) {
super(props);
...
const dataSource = new ListView.DataSource({
...
rowHasChanged: (row1, row2) => row1 !== row2 // 这个方法
});
}
然后就各种百度,最后在github上看到这个 issue。最后大家得出的结论就是如果要继续用这个组件,又想刷新列表的话就只能写成
下面这样。
but,这样写会让所有的数据都更新,对性能的消耗挺大的。
// !!!这样写
rowHasChanged: ( row1, row2) => true
emmm,但是我不想去看其他的插件了,所以就采用了上面的写法。
下面就讲一下我怎么配置这个listView的,因为我觉得这个组件官方demo还真的写得蛮看不懂的。
ListView在实际项目中使用在实际项目中使用
下面的代码主要展示怎么配置listview,不要扣小地方,因为我把很多业务代码去掉了。
class Message extends React.Component {
constructor(props) {
super(props);
const dataSource = new ListView.DataSource({
// 这样写,每次都执行rowHasChanged,每次都更新row
rowHasChanged: ( row1, row2) => true
});
this.state = {
dataSource,
};
}
componentDidMount() {
// 请求初始化数据
}
// 在这里维护长列表数据,把从接口获取来的数据赋值给state里的dataSource。
componentWillReceiveProps(nextProps) {
if(nextProps.message.commentList !== this.props.message.commentList){
this.setState({
// 注意!这里的cloneWithRows(),antd里规定用它来更新dataSource,这个不是拼接数据,用这个函数,dataSource会更新成nextProps.message.commentList。
//所以在接受后端分页数据时,就把拼接好的数据赋值给nextProps.message.commentList(这个在model.js里写了)
dataSource: this.state.dataSource.cloneWithRows(nextProps.message.commentList),
});
}
}
// onEndReached,列表被滚动到距离最底部不足`onEndReachedThreshold`个像素的距离时调用
// 在这里写分页请求
onEndReached = (event) => {
const { dispatch } = this.props;
const { email } = this.props.user;
const { pageNum, pageSize, contentId, totalCount, commentList } = this.props.message;
let hasMore = totalCount > commentList.length ? true : false;
// load new data
// hasMore: from backend data, indicates whether it is the last page, here is false
if (!hasMore) {
return;
资源评论
weixin_38625448
- 粉丝: 8
- 资源: 956
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功