当前位置:   article > 正文

uni-app的uni-list列表组件高效使用举例 (仿知乎日报实现)

uni-list

目录

前言

uni-list组件介绍

基本使用

高级配置与自定义

仿知乎日报实现

知乎的api接口

后台服务实现

知乎日报首页

轮播图界面实现

客户端接口实现

uni-list列表使用

插入日期分割线

下滑分页的实现

完整页面代码

其他资源


前言

在移动应用开发领域,列表展示是最常见的需求之一,无论是新闻列表、商品目录还是社交动态,一个清晰、响应迅速的列表组件是提升用户体验的关键。

Uni-App作为一款优秀的跨平台开发框架,提供了丰富的组件库,其中uni-list组件就是专为列表展示而设计的高效解决方案。本文将深入介绍uni-list组件的使用方法、特点及应用场景,帮助开发者快速掌握这一利器。 

uni-list组件广泛应用于各种场景,如:新闻资讯列表,展示新闻标题、摘要和配图。商品列表,展示商品图片、名称、价格和评价。社交动态,展示用户头像、用户名、动态内容和互动按钮。设置页面,展示各类开关、选项等。

uni-list组件介绍

uni-list是Uni-App框架内置的一个列表组件,它以简洁、灵活的方式封装了列表展示逻辑,支持多种列表项布局,如文本、图标、图片等组合展示。通过uni-list,开发者可以轻松创建美观、响应式的列表界面,无需从零开始编写复杂的布局代码,大大提升了开发效率。

uni-list官方文档地址:uni-app官网

uni-list 列表 - DCloud 插件市场

基本使用

在Uni-App项目中使用uni-list,首先确保在页面模板中引入uni-list组件。uni-list组件属于uni-app扩展组件uni-ui中的一个组件。要想使用它需要先引入uni-ui,引入的方法这里就不说了。

以下是一个简单的示例:

  1. <template>
  2. <view>
  3. <uni-list>
  4. <uni-list-item v-for="(item, index) in listData" :key="index" title="{{item.title}}" note="{{item.note}}" />
  5. </uni-list>
  6. </view>
  7. </template>
  8. <script>
  9. export default {
  10. data() {
  11. return {
  12. listData: [
  13. { title: '列表项1', note: '详情描述1' },
  14. { title: '列表项2', note: '详情描述2' },
  15. // 更多数据...
  16. ]
  17. };
  18. }
  19. };
  20. </script>

在上述例子中,通过v-for指令遍历listData数组,为每个数组元素创建一个uni-list-item,展示标题(title)和备注(note)信息。

高级配置与自定义

uni-list组件的强大之处在于其高度的可定制性。

除了基本的文本展示,它还支持图片、图标、开关、滑动操作等多种元素的嵌入,以及不同的布局模式(如左图右文、上下结构等)。

图片展示:通过<uni-list-item>的thumb属性,可以为列表项添加左侧或顶部的缩略图。

图标与按钮:利用extra插槽,可以在列表项末尾添加图标或操作按钮,如删除、编辑等。

滑动操作:结合swipe-action组件,可以为列表项添加滑动时触发的操作菜单,提升交互体验。

示例:

左侧显示略缩图、图标

  • 设置 thumb 属性 ,可以在列表左侧显示略缩图
  • 设置 show-extra-icon 属性,并指定 extra-icon 可以在左侧显示图标
  1. <uni-list>
  2. <uni-list-item title="列表左侧带略缩图" note="列表描述信息" thumb="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png"
  3. thumb-size="lg" rightText="右侧文字"></uni-list-item>
  4. <uni-list-item :show-extra-icon="true" :extra-icon="extraIcon1" title="列表左侧带扩展图标" ></uni-list-item>
  5. </uni-list>

 开启点击反馈和右侧箭头

  • 设置 clickable 为 true ,则表示这是一个可点击的列表,会默认给一个点击效果,并可以监听 click 事件,click 事件也在此绑定
  • 设置 link 属性,会自动开启点击反馈,并给列表右侧添加一个箭头
  • 设置 to 属性,可以跳转页面,link 的值表示跳转方式,如果不指定,默认为 navigateTo
  1. <uni-list>
  2. <uni-list-item title="开启点击反馈" clickable @click="onClick" ></uni-list-item>
  3. <uni-list-item title="默认 navigateTo 方式跳转页面" link to="/pages/vue/index/index" @click="onClick($event,1)" ></uni-list-item>
  4. <uni-list-item title="reLaunch 方式跳转页面" link="reLaunch" to="/pages/vue/index/index" @click="onClick($event,1)" ></uni-list-item>
  5. </uni-list>

通过插槽扩展

名称说明
header左/上内容插槽,可完全自定义默认显示
body中间内容插槽,可完全自定义中间内容
footer右/下内容插槽,可完全自定义右侧内容

通过插槽扩展 需要注意的是当使用插槽时,内置样式将会失效,只保留排版样式,此时的样式需要开发者自己实现 如果 uni-list-item 组件内置属性样式无法满足需求,可以使用插槽来自定义uni-list-item里的内容。 uni-list-item提供了3个可扩展的插槽:headerbodyfooter

  • 当 direction 属性为 row 时表示水平排列,此时 header 表示列表的左边部分,body 表示列表的中间部分,footer 表示列表的右边部分
  • 当 direction 属性为 column 时表示垂直排列,此时 header 表示列表的上边部分,body 表示列表的中间部分,footer 表示列表的下边部分 开发者可以只用1个插槽,也可以3个一起使用。在插槽中可自主编写view标签,实现自己所需的效果。

 示例:

  1. <uni-list>
  2. <uni-list-item title="自定义右侧插槽" note="列表描述信息" link>
  3. <template v-slot:header>
  4. <image class="slot-image" src="/static/logo.png" mode="widthFix"></image>
  5. </template>
  6. </uni-list-item>
  7. <uni-list-item>
  8. <!-- 自定义 header -->
  9. <template v-slot:header>
  10. <view class="slot-box"><image class="slot-image" src="/static/logo.png" mode="widthFix"></image></view>
  11. </template>
  12. <!-- 自定义 body -->
  13. <template v-slot:body>
  14. <text class="slot-box slot-text">自定义插槽</text>
  15. </template>
  16. <!-- 自定义 footer-->
  17. <template v-slot:footer>
  18. <image class="slot-image" src="/static/logo.png" mode="widthFix"></image>
  19. </template>
  20. </uni-list-item>
  21. </uni-list>

仿知乎日报实现

知乎的api接口

  1. ### 当前日报列表
  2. get https://news-at.zhihu.com/api/4/news/latest
  3. ###历史日报
  4. get https://news-at.zhihu.com/api/4/news/before/20240617
  5. ### 热门日报
  6. get http://news-at.zhihu.com/api/4/news/hot
  7. ### 主题日报
  8. get http://news-at.zhihu.com/api/4/news/theme/2024
  9. ### 2016年
  10. get http://news-at.zhihu.com/api/4/news/before/20160101
  11. ### 日报详情
  12. get http://news-at.zhihu.com/api/4/news/9773253
curl https://news-at.zhihu.com/api/4/news/latest |python3 -m json.tool

 

后台服务实现

博主没有直接调用知乎的后台api接口,而是自己使用golang的go-zero框架,从新包装实现了一下。 如果不用golang实现后台接口,以下内容可忽略。可以直接调用知乎的接口来测试。

1.go-api文件定义

  1. syntax = "v1"
  2. info (
  3. title: "doc title"
  4. desc: "zhihu background service api"
  5. version: "1.0"
  6. )
  7. // 0.轮播图
  8. type (
  9. SwiperData {
  10. id int `json:"id"`
  11. imageUrl string `json:"imageUrl"`
  12. title string `json:"title"`
  13. desc string `json:"description"`
  14. }
  15. SwiperResp {
  16. code int `json:"code"`
  17. message string `json:"message"`
  18. data []SwiperData `json:"data"`
  19. }
  20. )
  21. // ......
  22. // 11. 知乎日报 日报列表请求
  23. type (
  24. //请求
  25. ZhihuNewsReq {
  26. date string `path:"date"`
  27. }
  28. //应答
  29. ZhiItem {
  30. id string `json:"id"`
  31. image string `json:"image"`
  32. title string `json:"title"`
  33. url string `json:"url"`
  34. hint string `json:"hint"`
  35. date string `json:"date"`
  36. }
  37. ZhihuNewsResp {
  38. code int `json:"code"`
  39. message string `json:"message"`
  40. stories []ZhiItem `json:"stories"`
  41. date string `json:"date"`
  42. }
  43. )
  44. // 12. 知乎日报 日报详情
  45. type (
  46. //请求
  47. ZhiDetailReq {
  48. id string `path:"id"`
  49. }
  50. //应答
  51. CtItem {
  52. types string `json:"types"`
  53. value string `json:"value"`
  54. }
  55. ZhiDetailResp {
  56. code int `json:"code"`
  57. message string `json:"message"`
  58. content []CtItem `json:"content"`
  59. title string `json:"title"`
  60. author string `json:"author"`
  61. bio string `json:"bio"`
  62. avatar string `json:"avatar"`
  63. image string `json:"image"`
  64. more string `json:"more"`
  65. }
  66. )
  67. service zhihu-api {
  68. @doc (
  69. summary: "zhihu api"
  70. )
  71. @handler SwiperHandler
  72. get /api/v1/swiperdata returns (SwiperResp)
  73. // 11.知乎日报 news
  74. @handler ZhihuNewsHandler
  75. get /api/v1/zhihunews/:date (ZhihuNewsReq) returns (ZhihuNewsResp)
  76. // 12.知乎日报 详情
  77. @handler ZhiDetailHandler
  78. get /api/v1/zhihudetail/:id (ZhiDetailReq) returns (ZhiDetailResp)
  79. }

2.使用goctl工具自动生成后台项目代码

goctl api go -api go-zhihu/zhihu.api -dir go-zhihu/

3.实现后台接口逻辑

  1. func (l *ZhihuNewsLogic) ZhihuNews(req *types.ZhihuNewsReq) (resp *types.ZhihuNewsResp, err error) {
  2. url := "https://news-at.zhihu.com/api/4/news/latest"
  3. parsedDate, err := time.Parse("20060102", req.Date)
  4. if err != nil {
  5. l.Errorf("Error parsing date:", err)
  6. }
  7. url = "https://news-at.zhihu.com/api/4/news/before/" + parsedDate.AddDate(0, 0, 1).Format("20060102")
  8. res, err_ := httpc.Do(l.ctx, http.MethodGet, url, nil)
  9. if err_ != nil {
  10. l.Error(err_)
  11. return nil, err_
  12. }
  13. defer res.Body.Close()
  14. body, err := io.ReadAll(res.Body)
  15. if err != nil {
  16. l.Errorf("Failed to read response body:", err)
  17. return nil, err
  18. }
  19. var zhi types.ZhiItem
  20. var responseData []types.ZhiItem
  21. list_ := gjson.GetBytes(body, "stories").Array()
  22. for _, item := range list_ {
  23. zhi.Id = strconv.FormatInt(item.Get("id").Int(), 10)
  24. zhi.Title = item.Get("title").String()
  25. zhi.Image = item.Get("images.0").String()
  26. zhi.Url = item.Get("url").String()
  27. zhi.Hint = item.Get("hint").String()
  28. zhi.Date = gjson.GetBytes(body, "date").String()
  29. responseData = append(responseData, zhi)
  30. }
  31. if len(list_) != 0 {
  32. resp = &types.ZhihuNewsResp{
  33. Code: 0,
  34. Message: res.Status,
  35. Stories: responseData,
  36. Date: gjson.GetBytes(body, "date").String(),
  37. }
  38. } else {
  39. resp = &types.ZhihuNewsResp{
  40. Code: 0,
  41. Message: res.Status,
  42. Stories: responseData,
  43. Date: "",
  44. }
  45. }
  46. return resp, nil
  47. }

知乎日报首页

轮播图界面实现

  1. <template>
  2. <view class="content">
  3. <swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval"
  4. :duration="duration" lazy-render>
  5. <swiper-item v-for="item in swiperList" :key="item.id">
  6. <image :src="item.image" :alt="item.title" mode="widthFix" class="swiper-image"></image>
  7. <view class="swiper-desc" v-if="item.title">{{ item.title }}</view>
  8. </swiper-item>
  9. </swiper>
  10. </view>
  11. </template>
  12. <script>
  13. import { getZhihuNewsList } from '@/api/zhihu.js';
  14. export default {
  15. data() {
  16. return {
  17. indicatorDots: true,
  18. autoplay: true,
  19. interval: 2000,
  20. duration: 500,
  21. // 轮播图的数据列表,默认为空数组
  22. swiperList:[],
  23. // 日报数据列表,默认为空数组
  24. stories:[],
  25. currentDate: '', // 初始化为今天的日期
  26. previousDate: '', // 上一个的日期
  27. }
  28. }
  29. }
  30. </script>

客户端接口实现

  1. // 知乎日报 列表页
  2. /**
  3. * date 日期 格式:yyyymmdd
  4. */
  5. export const getZhihuNewsList = async (date) => {
  6. try {
  7. console.log('getZhihuNewsList request');
  8. let date_ = date.replace(/-/g, '')
  9. const response = await uni.$http.get('/zhihunews/'+date_);
  10. console.log(response);
  11. if (response.statusCode !== 200) {
  12. uni.showToast({
  13. title: '数据请求失败! ',
  14. duration: 1500,
  15. icon: 'none',
  16. });
  17. return [];
  18. }
  19. return response.data;
  20. } catch (error) {
  21. console.error('Network request failed:', error);
  22. uni.showToast({
  23. title: '网络请求失败! ',
  24. duration: 1500,
  25. icon: 'none',
  26. });
  27. return [];
  28. }
  29. };

uni-list列表使用

  1. <uni-list>
  2. <uni-list-item direction="row" v-for="item in stories" :key="item.id" :title="item.title" >
  3. <template v-slot:body>
  4. <view class="uni-list-box uni-content">
  5. <view class="uni-title uni-ellipsis-2">{{item.title}}</view>
  6. <view class="uni-note">
  7. <text>{{item.hint}}</text>
  8. </view>
  9. </view>
  10. </template>
  11. <template v-slot:footer>
  12. <view class="uni-thumb" style="margin: 0;">
  13. <image :src="item.image" mode="aspectFill"></image>
  14. </view>
  15. </template>
  16. </uni-list-item>
  17. </uni-list>

插入日期分割线

如何插入日期分割线?类似于知乎日报上,当往下滑动时会展示历史日期的日报,需要展示下日期和下滑线。如何在uni-list列表中实现这一效果呢?以下是代码:

  1. <uni-list>
  2. <template v-for="(item, index) in stories" :key="item.id">
  3. <!-- 如果是第一条或者日期有变化,则插入日期分割线 -->
  4. <uni-list-item direction="row" v-if="isShowDivider(index)" >
  5. <template v-slot:header>
  6. <view class="uni-divider__content">
  7. <text>{{item.date.replace(/(\d{4})(\d{2})(\d{2})/, '$1-$2-$3')}}</text>
  8. </view>
  9. <view class="uni-divider__line"></view>
  10. </template>
  11. </uni-list-item>
  12. <!-- 正常的列表项 -->
  13. <uni-list-item direction="row" :title="item.title">
  14. <template v-slot:body>
  15. <view class="uni-list-box uni-content">
  16. <view class="l-title uni-ellipsis-2">{{item.title}}</view>
  17. <view class="uni-note">
  18. <text>{{item.hint}}</text>
  19. </view>
  20. </view>
  21. </template>
  22. <template v-slot:footer>
  23. <view class="uni-thumb" style="margin: 0;">
  24. <image :src="item.image" mode="aspectFill"></image>
  25. </view>
  26. </template>
  27. </uni-list-item>
  28. </template>
  29. </uni-list>

下滑分页的实现

当向页面下滑动时,需要展示历史日期的日报,通过onReachBottom()这一回调可以实现效果。

  1. /**
  2. * 上拉加载回调函数
  3. */
  4. onReachBottom() {
  5. console.log('onReachBottom')
  6. this.getmorenews()
  7. }
  8. methods: {
  9. formatDate(date) {
  10. const year = date.getFullYear();
  11. const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,所以需要+1
  12. const day = String(date.getDate()).padStart(2, '0');
  13. return `${year}-${month}-${day}`;
  14. },
  15. isShowDivider(index) {
  16. if (this.stories[index].date !== this.previousDate) {
  17. this.previousDate = this.stories[index].date;
  18. console.log(this.previousDate)
  19. if(index!==0){
  20. return true;
  21. }
  22. }
  23. return false;
  24. },
  25. // 触底之后触发函数,
  26. getmorenews() {
  27. //this.loadStatu = true
  28. //this.listStatus = 'loading'
  29. //每次滑动都递减一天
  30. const date_ = new Date(this.currentDate);
  31. console.log(date_);
  32. date_.setDate(date_.getDate() - 1); // 日期减一
  33. //console.log(date_);
  34. let currentDate_ = this.formatDate(date_);
  35. console.log('currentDate_:'+currentDate_);
  36. getZhihuNewsList(currentDate_).then(result => {
  37. console.log("getZhihuNewsList,result:");
  38. console.log(result);
  39. this.currentDate = this.formatDate(date_);
  40. this.stories = this.stories.concat(result.stories);
  41. });
  42. }
  43. },

完整页面代码

  1. <template>
  2. <view class="content">
  3. <swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval"
  4. :duration="duration" lazy-render>
  5. <swiper-item v-for="item in swiperList" :key="item.id">
  6. <image :src="item.image" :alt="item.title" mode="widthFix" class="swiper-image"></image>
  7. <view class="swiper-desc" v-if="item.title">{{ item.title }}</view>
  8. </swiper-item>
  9. </swiper>
  10. <!-- 通过 loadMore 组件实现上拉加载效果,如需自定义显示内容,可参考:https://ext.dcloud.net.cn/plugin?id=29 -->
  11. <uni-list>
  12. <template v-for="(item, index) in stories" :key="item.id">
  13. <!-- 如果是第一条或者日期有变化,则插入日期分割线 -->
  14. <uni-list-item direction="row" v-if="isShowDivider(index)" >
  15. <template v-slot:header>
  16. <view class="uni-divider__content">
  17. <text>{{item.date.replace(/(\d{4})(\d{2})(\d{2})/, '$1-$2-$3')}}</text>
  18. </view>
  19. <view class="uni-divider__line"></view>
  20. </template>
  21. </uni-list-item>
  22. <!-- 正常的列表项 -->
  23. <uni-list-item direction="row" :title="item.title">
  24. <template v-slot:body>
  25. <view class="uni-list-box uni-content">
  26. <view class="l-title uni-ellipsis-2">{{item.title}}</view>
  27. <view class="uni-note">
  28. <text>{{item.hint}}</text>
  29. </view>
  30. </view>
  31. </template>
  32. <template v-slot:footer>
  33. <view class="uni-thumb" style="margin: 0;">
  34. <image :src="item.image" mode="aspectFill"></image>
  35. </view>
  36. </template>
  37. </uni-list-item>
  38. </template>
  39. </uni-list>
  40. </view>
  41. </template>
  42. <script>
  43. import { getZhihuNewsList } from '@/api/zhihu.js';
  44. export default {
  45. data() {
  46. return {
  47. indicatorDots: true,
  48. autoplay: true,
  49. interval: 2000,
  50. duration: 500,
  51. // 轮播图的数据列表,默认为空数组
  52. swiperList:[],
  53. // 日报数据列表,默认为空数组
  54. stories:[],
  55. currentDate: '', // 初始化为今天的日期
  56. previousDate: '', // 上一个的日期
  57. }
  58. },
  59. onLoad() {
  60. this.currentDate = this.formatDate(new Date())
  61. this.previousDate = this.currentDate
  62. },
  63. methods: {
  64. formatDate(date) {
  65. const year = date.getFullYear();
  66. const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,所以需要+1
  67. const day = String(date.getDate()).padStart(2, '0');
  68. return `${year}-${month}-${day}`;
  69. },
  70. isShowDivider(index) {
  71. if (this.stories[index].date !== this.previousDate) {
  72. this.previousDate = this.stories[index].date;
  73. console.log(this.previousDate)
  74. if(index!==0){
  75. return true;
  76. }
  77. }
  78. return false;
  79. },
  80. // 触底之后触发函数,
  81. getmorenews() {
  82. //this.loadStatu = true
  83. //this.listStatus = 'loading'
  84. //每次滑动都递减一天
  85. const date_ = new Date(this.currentDate);
  86. console.log(date_);
  87. date_.setDate(date_.getDate() - 1); // 日期减一
  88. //console.log(date_);
  89. let currentDate_ = this.formatDate(date_);
  90. console.log('currentDate_:'+currentDate_);
  91. getZhihuNewsList(currentDate_).then(result => {
  92. console.log("getZhihuNewsList,result:");
  93. console.log(result);
  94. this.currentDate = this.formatDate(date_);
  95. this.stories = this.stories.concat(result.stories);
  96. });
  97. }
  98. },
  99. mounted() {
  100. console.log("mounted")
  101. console.log('currentDate:'+this.currentDate);
  102. getZhihuNewsList(this.currentDate).then(result => {
  103. console.log("getZhihuNewsList,result:");
  104. console.log(result);
  105. this.stories = result.stories;
  106. this.swiperList = result.stories;
  107. });
  108. },/**
  109. * 下拉刷新回调函数
  110. */
  111. onPullDownRefresh() {
  112. console.log('onPullDownRefresh')
  113. },
  114. /**
  115. * 上拉加载回调函数
  116. */
  117. onReachBottom() {
  118. console.log('onReachBottom')
  119. this.getmorenews()
  120. }
  121. }
  122. </script>
  123. <style lang="scss" scoped>
  124. @import '@/common/uni-ui.scss';
  125. page {
  126. display: flex;
  127. flex-direction: column;
  128. box-sizing: border-box;
  129. background-color: #efeff4;
  130. min-height: 100%;
  131. height: auto;
  132. }
  133. .content {
  134. width: 100%;
  135. display: flex;
  136. flex-direction: column;
  137. align-items: center;
  138. justify-content: center;
  139. }
  140. .uni-list-box {
  141. margin-top: 0;
  142. }
  143. .l-title {
  144. font-weight: bold;
  145. font-size: 30rpx;
  146. color: #3b4144;
  147. }
  148. .uni-content {
  149. padding-right: 10rpx;
  150. }
  151. .uni-note {
  152. display: flex;
  153. margin: 0;
  154. justify-content: space-between;
  155. }
  156. .thumb-image {
  157. width: 100%;
  158. height: 100%;
  159. }
  160. /*布局和溢出隐藏规则*/
  161. .ellipsis {
  162. display: flex;
  163. overflow: hidden;
  164. }
  165. .uni-ellipsis-1 {
  166. overflow: hidden;
  167. white-space: nowrap; /*nowrap;:强制文本在一行内显示,不允许换行*/
  168. text-overflow: ellipsis;
  169. }
  170. /*多行文本的省略效果*/
  171. .uni-ellipsis-2 {
  172. overflow: hidden;
  173. /*表示当文本内容超出所在容器的宽度时,用省略号来代替超出的部分*/
  174. text-overflow: ellipsis;
  175. display: -webkit-box;
  176. -webkit-line-clamp: 2;
  177. -webkit-box-orient: vertical;
  178. }
  179. .swiper {
  180. width: 100%;
  181. height: 300rpx;
  182. }
  183. .swiper-image{
  184. width: 100%;
  185. height: auto;
  186. }
  187. .swiper-desc {
  188. position: absolute;
  189. bottom: 20px;
  190. left: 0;
  191. right: 0;
  192. color: #fff;
  193. background-color: rgba(0, 0, 0, 0.5);
  194. padding: 10px;
  195. text-align: center;
  196. }
  197. .swiper-item {
  198. display: block;
  199. height: 300rpx;
  200. line-height: 300rpx;
  201. text-align: center;
  202. }
  203. .date-divider {
  204. color: #8f8f94;
  205. font-size: 12rpx;
  206. font-weight: bold;
  207. }
  208. .line-divider {
  209. height: 1px;
  210. width: 75%;
  211. margin-left: 10rpx;
  212. margin-top: 15rpx;
  213. background-color: #D8D8D8; /* 分割线颜色 */
  214. }
  215. </style>

完整工程源码

最后,附上测试的工程完整源码。

资源下载地址https://download.csdn.net/download/qq8864/89377440

人到了一定年纪,你再去回首过往,曾经那些重大的时刻,我们也一步步咬紧牙关挺过去,一步步熬过许多最黑暗的日子,走到如今。关关难过,关关通过,一路上,我们也练就了一身的本领,也拥有一些处事不惊的能力和适应生活的心态。

杨绛先生说:“生活并非都是繁花锦簇,所有的好,不过是来自内心的知足,眼里的热爱,以及对万千世界删繁就简的态度。与独处相安,与万事言和。这烟火人间,事事值得,事事也遗憾。”

生活不可能都是鲜花和阳光,也充满无数的荆棘和坎坷,走过的每一段岁月,曾经都有美好照亮前行,也有一些遗憾留在心中。

生活总是喜忧参半,没有十全十美,万事只求半称心,所有的美好不过都是来自于懂得知足常乐。

生活都是在于选择之中,选择了一条路,注定也会失去另一条路的风景,遗憾是人生常态而已。不如充实自己,什么让你快乐,你就去做什么,不要非要去求什么意义。对我来说,虽然天色以晚,别人喜欢刷抖音,而我喜欢敲代码和写文字,简称码字。这使我快乐,我走在充实自己的路上,足以。

如果钓鱼的意义是为了吃鱼肉,那生活将是多么无趣。

其他资源

 uni-list 列表 - DCloud 插件市场

https://news-at.zhihu.com/api/4/news/latest

-Api/豆瓣电影.md at master · shichunlei/-Api · GitHub

https://www.cnblogs.com/oopsguy/p/5968447.html

uni-app官网

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号