沐游虞笔记
  • 前端面试题

    • HTML面试题汇总(无答案)
    • HTML面试题汇总
    • CSS 面试题汇总(无答案)
    • CSS 面试题汇总
    • javascript 面试题汇总(无答案)
    • javascript 面试题汇总
    • promise 面试题(无答案)
    • promise 面试题
    • 浏览器面试题汇总(无答案)
    • 浏览器面试题汇总
    • 网络面试题汇总(无答案)
    • 网络面试题汇总
    • 工程化面试题汇总(无答案)
    • 工程化面试题汇总
    • VUE面试题汇总(无答案)
    • VUE面试题汇总
  • 直播课文件

    • 静态页面学习指导
    • 属性的计算过程
    • 层叠继承规则总结
    • BFC
    • JS基础知识回顾
    • DOM 事件的传播机制
    • DOM 事件的注册和移除
    • 阻止事件默认行为
    • 基础领航考试题
    • 基础领航考试题(答案)
    • 2024前端发展
    • JS核心概念学习指导
    • 第三方库与工程化学习指导
    • Vue入门学习指导
    • vue进阶学习指导
    • 前端性能优化
  • 笔面试环节知识讲解

    • 目录
    • 图像处理
    • 图像处理(面试)
    • Webpack构建优化
    • Webpack构建优化(面试)
    • TTS性能优化
    • TTS性能优化(面试)
    • 实时协作
    • 实时协作(面试)
    • 网页复制图片到剪贴板
    • 网页复制图片到剪贴板(面试)
    • vite插件
    • vite插件(面试)
    • 表单数据同步与保持
    • 表单数据同步与保持(面试)
    • 优化虚拟列表
    • 优化虚拟列表(面试)
    • 微前端解决巨石应用
    • 微前端解决巨石应用(面试)
    • DNS解析与优化
    • DNS解析与优化(面试)
    • 前端监控
    • 前端监控(面试)
    • 12.跨标签页通信
    • 12.跨标签页通信(面试)
    • 13.Vite相关优化
    • 13.Vite相关优化(面试)
    • 14.计时器节流问题
    • 14.计时器节流问题(面试)
    • 15.多文件预览支持
    • 15.多文件预览支持(面试)
    • 16.defer优化白屏时间
    • 16.defer优化白屏时间(面试)
  • Vue3整体变化
  • Vue2响应式回顾
  • Vue3响应式变化
  • nextTick实现原理
  • 两道代码题
  • Vue运行机制
  • 渲染器核心功能
  • 事件绑定与更新
  • computed面试题
  • watch面试题
  • 图解双端diff
  • 图解快速dff
  • 最长递增子序列
  • 模板编译器
  • 模板编译提升
  • 组件name作用
  • 路由传参方式
  • 基础篇

    • 序章React介绍
    • JSX基础语法
    • React基本介绍
    • 表单
    • 生命周期
    • 组件与事件绑定
    • 组件状态与数据传递
    • Hooks
    • React--redux介绍
    • React-router介绍
  • 就业篇

    • 属性默认值和类型验证
    • 高阶组件
    • Ref
    • Context
    • Render Props
    • Portals
    • 错误边界
    • 组件渲染性能优化
    • 前端框架的理解
    • Reacti和Vue描述页面的区别
    • 前端框架的分类
    • 虚拟DoM
    • React整体架构
    • React渲染流程
    • Fiber双缓冲
    • MessageChannel
    • Scheduleri调度普通任务
    • Scheduleri调度延时任务
    • 最小堆
    • React中的位运算
    • beginWork工作流程
    • completeWork工作流程
    • 图解diff算法
    • commit工作流程
    • lane模型
    • React中的事件
    • Hooks原理
    • useStateuseReducer.
    • effect相关hook
    • useCallbackuseMemo
    • useRef
    • Update
    • 性能优化策略之eagerState
    • 性能优化策略之bailout
    • bailoutContextAPl
    • 性能优化对日常开发启示
  • 前端监控概述
  • 错误监控
  • 数据上报
  • 页面性能监控
  • 用户行为收集与埋点
  • CSS3手册
  • HTML5手册
  • JavaScript语言提升

    • es补充
    • 事件循环
    • promise基础
    • Promise的链式调用
    • Promise的静态方法
    • async和await
    • Promise相关面试题
  • 网络

    • 客户端与服务器
    • 关于 Apifox 的使用
  • git文档
  • 工程化

    • CommonJS
    • ES module
    • npm文档(包管理)
    • Lass笔记
    • webpack工具
  • canvas详解
  • uinapp笔记
  • 自动化测试
  • oauth2令牌

    • 认识Oauth2
    • 三方应用实现github授权
    • 微信三方应用登录实现
    • 支付宝沙箱支付功能
  • 前端面试题

    • HTML面试题汇总(无答案)
    • HTML面试题汇总
    • CSS 面试题汇总(无答案)
    • CSS 面试题汇总
    • javascript 面试题汇总(无答案)
    • javascript 面试题汇总
    • promise 面试题(无答案)
    • promise 面试题
    • 浏览器面试题汇总(无答案)
    • 浏览器面试题汇总
    • 网络面试题汇总(无答案)
    • 网络面试题汇总
    • 工程化面试题汇总(无答案)
    • 工程化面试题汇总
    • VUE面试题汇总(无答案)
    • VUE面试题汇总
  • 直播课文件

    • 静态页面学习指导
    • 属性的计算过程
    • 层叠继承规则总结
    • BFC
    • JS基础知识回顾
    • DOM 事件的传播机制
    • DOM 事件的注册和移除
    • 阻止事件默认行为
    • 基础领航考试题
    • 基础领航考试题(答案)
    • 2024前端发展
    • JS核心概念学习指导
    • 第三方库与工程化学习指导
    • Vue入门学习指导
    • vue进阶学习指导
    • 前端性能优化
  • 笔面试环节知识讲解

    • 目录
    • 图像处理
    • 图像处理(面试)
    • Webpack构建优化
    • Webpack构建优化(面试)
    • TTS性能优化
    • TTS性能优化(面试)
    • 实时协作
    • 实时协作(面试)
    • 网页复制图片到剪贴板
    • 网页复制图片到剪贴板(面试)
    • vite插件
    • vite插件(面试)
    • 表单数据同步与保持
    • 表单数据同步与保持(面试)
    • 优化虚拟列表
    • 优化虚拟列表(面试)
    • 微前端解决巨石应用
    • 微前端解决巨石应用(面试)
    • DNS解析与优化
    • DNS解析与优化(面试)
    • 前端监控
    • 前端监控(面试)
    • 12.跨标签页通信
    • 12.跨标签页通信(面试)
    • 13.Vite相关优化
    • 13.Vite相关优化(面试)
    • 14.计时器节流问题
    • 14.计时器节流问题(面试)
    • 15.多文件预览支持
    • 15.多文件预览支持(面试)
    • 16.defer优化白屏时间
    • 16.defer优化白屏时间(面试)
  • Vue3整体变化
  • Vue2响应式回顾
  • Vue3响应式变化
  • nextTick实现原理
  • 两道代码题
  • Vue运行机制
  • 渲染器核心功能
  • 事件绑定与更新
  • computed面试题
  • watch面试题
  • 图解双端diff
  • 图解快速dff
  • 最长递增子序列
  • 模板编译器
  • 模板编译提升
  • 组件name作用
  • 路由传参方式
  • 基础篇

    • 序章React介绍
    • JSX基础语法
    • React基本介绍
    • 表单
    • 生命周期
    • 组件与事件绑定
    • 组件状态与数据传递
    • Hooks
    • React--redux介绍
    • React-router介绍
  • 就业篇

    • 属性默认值和类型验证
    • 高阶组件
    • Ref
    • Context
    • Render Props
    • Portals
    • 错误边界
    • 组件渲染性能优化
    • 前端框架的理解
    • Reacti和Vue描述页面的区别
    • 前端框架的分类
    • 虚拟DoM
    • React整体架构
    • React渲染流程
    • Fiber双缓冲
    • MessageChannel
    • Scheduleri调度普通任务
    • Scheduleri调度延时任务
    • 最小堆
    • React中的位运算
    • beginWork工作流程
    • completeWork工作流程
    • 图解diff算法
    • commit工作流程
    • lane模型
    • React中的事件
    • Hooks原理
    • useStateuseReducer.
    • effect相关hook
    • useCallbackuseMemo
    • useRef
    • Update
    • 性能优化策略之eagerState
    • 性能优化策略之bailout
    • bailoutContextAPl
    • 性能优化对日常开发启示
  • 前端监控概述
  • 错误监控
  • 数据上报
  • 页面性能监控
  • 用户行为收集与埋点
  • CSS3手册
  • HTML5手册
  • JavaScript语言提升

    • es补充
    • 事件循环
    • promise基础
    • Promise的链式调用
    • Promise的静态方法
    • async和await
    • Promise相关面试题
  • 网络

    • 客户端与服务器
    • 关于 Apifox 的使用
  • git文档
  • 工程化

    • CommonJS
    • ES module
    • npm文档(包管理)
    • Lass笔记
    • webpack工具
  • canvas详解
  • uinapp笔记
  • 自动化测试
  • oauth2令牌

    • 认识Oauth2
    • 三方应用实现github授权
    • 微信三方应用登录实现
    • 支付宝沙箱支付功能
  • 课程简介

    • 课程简介
  • 小程序简介(一)

    • 小程序简介(一)
  • 小程序简介(二)

    • 小程序简介(二)
  • uniapp环境搭建+设备调试

    • uniapp环境搭建+设备调试
  • uniapp基础API讲解(一)

    • uniapp基础API讲解(一)
  • uniapp基础API讲解(二)

    • uniapp基础API讲解(二)
  • unicloud基础配置

    • unicloud基础配置
  • uncloud API操作

    • uncloud API操作
  • 项目启动-结构搭建

    • 项目启动-结构搭建
  • 导航栏制作适配多端

    • 导航栏制作适配多端
  • 选项卡制作

    • 选项卡制作
  • 公共请求方法封装

    • 公共请求方法封装
  • 文章列表制作-容器组件

    • 文章列表制作-容器组件
  • 文章列表制作-文章卡片

    • 文章列表制作-文章卡片
  • 文章列表制作-数据获取

    • 文章列表制作-数据获取
  • 文章列表制作-上拉加载

    • 文章列表制作-上拉加载
  • 用户登录-登录界面搭建

    • 用户登录-登录界面搭建
  • 用户登录-表单验证

    • 用户登录-表单验证
  • 用户登录-账户名密码登录

    • 用户登录-账户名密码登录
  • 用户登录-短息验证码登录

    • 用户登录-短信验证码登录
  • 收藏按钮组件实现

    • 收藏按钮组件实现
      • 收藏按钮组件实现
        • 一、前端处理
        • 二、云函数定义
        • 获取数据后前端处理
  • 搜索页面-结构搭建

    • 搜索页面-结构搭建
  • 搜索页面-业务逻辑处理

    • 搜索页面-业务逻辑处理
  • 标签页面-结构搭建

    • 标签页面-结构搭建
  • 标签页面-选项卡业务逻辑处理

    • 标签页面-选项卡业务逻辑处理
  • 文章详情页面-结构样式处理

    • 文章详情页面-结构样式处理
  • 文章详情页面-数据初始化渲染

    • 文章详情页面-数据初始化渲染
  • 文章详情页面-评论组件制作

    • 文章详情页面-评论组件制作
  • 文章详情页面-评论展示组件制作

    • 文章详情页面-评论展示组件制作
  • 文章详情页面-指定评论内容处理

    • 文章详情页面-指定评论内容处理
  • 文章详情页面-关注作者

    • 文章详情页面-关注作者
  • 文章详情页面-点赞+浏览次数实现

    • 文章详情页面-点赞+浏览次数实现
  • 评论页面制作

    • 评论页面制作
  • 关注界面-结构搭建

    • 关注界面-结构搭建
  • 关注界面-作者组件制作

    • 关注界面-作者组件制作
  • 个人中心-我的文章

    • 个人中心-我的文章
  • 个人中心-意见反馈业务逻辑处理

    • 个人中心-意见反馈业务逻辑处理
  • 发布-wap端发行打包

    • 发布-wap端发行打包
  • 发布-微信小程序发布

    • 发布-微信小程序发布
  • 发布-app安卓系统应用打包发布

    • 发布-app安卓系统应用打包发布
  • uinapp
  • 收藏按钮组件实现
luzhichang
2023-12-04
目录

收藏按钮组件实现

# 收藏按钮组件实现

# 一、前端处理

  1. 收藏图标点击事件内获取用户信息,及文章信息,传递到后端

    由于多个界面中都会用到userInfo对象,可将userInfo对象放在一个全局的mixin中进行封存,保证每个界面或组件内部都可以进行使用

    1. 定义commonMixin文件

      import { mapState } from 'vuex'
      
      export default {
        install (Vue) {
          Vue.mixin({
            computed: {
              ...mapState(['userInfo'])
            }
          })
        }
      }
      
    2. main.js文件中对common Mixing文件进行使用

      // main.js
      import commonMixin from './common/commonMixin.js'
      Vue.use(commonMixin)
      
  2. 将用户ID及文件ID作为参数传递给云函数

    1. 创建全局检测用户是否登录函数,供多个组件进行使用,commonMixin中完成

      // commonMixin文件
      checkedIsLogin () {
                return new Promise(resolve => {
                  if (this.userInfo) {
                    resolve()
                  } else {
                    uni.navigateTo({
                      url: '/pages/userInfo/login/login'
                    })
                  }
                })
              }
      // saveLike组件
      await this.checkedIsLogin();
      
    2. 将文章信息传递到saveLike组件内部使用

      //listCard 组件
      <SaveLikes :item="item"></SaveLikes>
      // saveLike组件
       props: {
          item: Object
        }
      
    3. 发送数据到云服务器

       const res = await this.$http.upate_save_like({
              articleId: this.item._id,
              userId: this.userInfo._id
            })
      

# 二、云函数定义

  1. 获取用户记录值

  2. 找到指定字段article_likes_ids

  3. 通过db.command 更新指令修改article_likes_ids

    参考地址:https://uniapp.dcloud.io/uniCloud/cf-database?id=query-command

    • 当文章id存在,进行删除操作,使用pull方法 参考地址:https://uniapp.dcloud.io/uniCloud/cf-database?id=pull
    • 当文章id不存在,进行添加操作,使用addToSet方法 参考地址:https://uniapp.dcloud.io/uniCloud/cf-database?id=addtoset
  4. 处理完成,将article_likes_ids进行修改之后,重新存储

    'use strict';
    // 定义数据库引用
    const db = uniCloud.database();
    // 定义修改指令
    const dbCmd = db.command
    
    exports.main = async (event, context) => {
    	const {
    		userId,
    		articleId
    	} = event
    	// 获取用户Ids集合
    	const userInfo = await db.collection('user').doc(userId).get();
    
    	const articleIds = userInfo.data[0].article_likes_ids
    	let returnMsg = null
    
    	let articleArr = null;
    	// 如果包含删除收藏
    	if (articleIds.includes(articleId)) {
    		articleArr = dbCmd.pull(articleId)
    		returnMsg = '取消收藏成功'
    	} else {
    		articleArr = dbCmd.addToSet(articleId)
    		returnMsg = '添加收藏成功'
    	}
    
    	await db.collection('user').doc(userId).update({
    		article_likes_ids: articleArr
    	})
    
    	const updateUserInfo = await db.collection('user').doc(userId).get()
    
    	//返回数据给客户端
    	return {
    		code: 0,
    		data: {
    			msg: returnMsg,
    			newUserInfo:updateUserInfo.data[0]
    		}
    	}
    };
    
    

# 获取数据后前端处理

  1. 修改存储的用户信息article_likes_ids数组

    // saveLikes组件处理
    this.updateUserInfo({ ...this.userInfo, ...newUserInfo })
    
  2. 弹出提示信息

  3. 重新对保存状态icon图标赋值

    使用计算属性处理用户收藏保存状态

     computed: {
        isLike () {
          return this.userInfo && this.userInfo.article_likes_ids.includes(this.item._id)
        }
      }
    
用户登录-短信验证码登录
搜索页面-结构搭建

← 用户登录-短信验证码登录 搜索页面-结构搭建→

Theme by Vdoing | Copyright © 2021-2024 蜀ICP备2024068710号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式