欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

用Taro、React和微信云开发,我成功创建了一款满足打工人需求的小程序

最编程 2024-01-09 09:10:00
...

上一篇是关于小程序的开发过程,这篇就专门写一下技术类的吧~ 小程序的开发大家都会,但是云开发这块还有很多文档好像不多,所以这里我会着重写一写云开发的注意事项。

为了计划逃离打工,我开发了一个小程序...

小程序二维码:

cb1cb7d5c335d5dbc592f2e1cf8d489.jpg

简介

一天包含每天工作时长的工资计算、毒鸡汤、辟谣列表、一会吃什么、
下班做什么,距节假日、发薪日、休息日的小程序、kfc疯狂星期四文案
(持续更新中...)

主页效果图

图层 0.png

技术

前端:TaroJs、 React Hooks

后端:微信云开发

工具:vscode 、微信开发者工具

TaroJS

  • Taro能支持很多技术栈,对于前端开发者来说是非常友好的框架。
  • 官方文档:taro-docs.jd.com/docs
Taro 是一个开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发
微信 / 京东 / 百度 / 支付宝 / 字节跳动 / QQ / 飞书 小程序 / H5 / RN 等应用。

第一次使用Taro,原因就是上一份工作是使用React技术栈,后来用不惯Vue,所以选择Taro。 个人觉得还可以,3.0版本之后,已经能支持大部分原生微信api了,组件也是。 当然,原生小程序的坑也一个不落下。

创建项目

创建项目就很久简单, 根据Taro的文档来就可以了。

  • 文档: taro-docs.jd.com/docs/GETTIN…
  • 建议使用yarn,然后选择你需要的技术栈就可以了

image.png

  • 然后你就得到类似这样的项目(React版本)
image.png

到处,项目已经创建的差不多了,目录管理、工具、https请求的封装都因人而异,我这里主要讲解云开发的使用。

云开发服务

  • 云数据库:能支持数据格式JSON,需要什么加什么,非常方便

  • 云函数:跟普通函数类似,能调用微信的服务类api,如:获取微信openid

    只需要使用微信开发者工具创建小程序的时候,选择云开发就可以了,但是要真实的AppId,测试号不可以

    注意要确定好云开发服务器名字,创建之后就不能改了。

image.png
  • 云开发服务器界面

image.png

微信云开发使用

如果你开通了微信云开发,那你需要在配置文件中加入对应的文件目录

image.png

那么就会和下图一样,出现云开发环境,你只需要在本地写自己的云开发函数,然后同步到云服务器,即可

image.png

1、获取openId的云函数

image.png
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}
  • 前端项目中使用,就能获取到对应的微信id。

image.png

2、创建云数据库

很简单,直接创建,跟后台管理系统一样,相信大家都很熟

image.png

然后你就得到一个空白的数据库,这里就是存JSON数组的地方,什么字段你都可以*发挥

image.png

image.png

3、云数据库初始化

微信云开发中,必须要初始化数据

 // 初始化数据库
const db = Taro.cloud.database({
  env: 'cat-xxxxxxxx'
})
  • 可以在utils.js中初始化,但是要注意项目的执行顺序
  • 因为项目是最开始执行的文件是:app.tsx,如果你在app.tsx文件中使用封装的数据库对象,那么你就会看到数据库对象是undefined。
// 公共js中的数据库初始化
// utils.js

import Taro from '@tarojs/taro'
export const db = Taro.cloud.database({
  env: 'cat-xxxxxxxxx'
})
  • 页面中使用
import { db } from '@/utils/init'

...

// 根据列表id,获取数据库中的信息
db.collection('rumor').where({
  _id: _.eq(_id)
}).get({
  success: (res: any) => {
    setRumor(res.data[0])
  }
})

...

4、注意!! 重中之重!! 云开发数据库的权限

云数据库创建之后,默认是仅【创建者读写】的,而很多数据是自己导入的,在后台是被默认为没有创建者的!! 所以,当你发现查不到数据的时候,第一时间要去看数据库的权限。别给这玩意给气炸了!!!

image.png

5、云开发数据的CURD

直接看微信云开发的官方文档吧,不行的话就直接百度。

微信云开发CURD文档:developers.weixin.qq.com/miniprogram…

我就简单的做一下示例。

  • 新增用户数据

  const fetchStateAdd = (openid) => {
    const db = Taro.cloud.database({
      env: 'cat-xxxxxxx'
    })
    // 初始化用户数据
    const data = {
      ...counterStore.globalState
    }
    db.collection('state').add({
      data: data,
      success: function (res: any) {
       // res 不会返回新增后的数据
       // 把用户数据存入本地存储
        const globalState = {
          ...data,
          _id: res._id,
          _openid: openid
        }
        counterStore.setGlobalState(globalState)
      }
    })
  } 
  • 更新用户数据
const stateSave = () => {
    const { _id, _openid, ...rest } = state
    let globalState = JSON.parse(JSON.stringify(state))
    // 更新数据的时候不能把_id,_openId数据传回去,会造成冲突
    delete globalState._id
    delete globalState._openid
    
    db.collection('state').doc(_id).update({
      // data 传入需要局部更新的数据
      // 除了自己修改的数据以外,还要把其余数据原封不动的传回去
      data: {
        ...rest,
        ...globalState
      },
      success: function (res) {
        setGlobalState(state)
        onCancel()
      }
    })
  }
  • 查询用户数据
   // 根据id获取一些全局数据
 
   const db = Taro.cloud.database({ env: 'cat-xxxxxxxxx' })
   db.collection('global').where({
     _id: _.eq(globalId)
   }).get({
     success: function (res: any) {
       const item = res.data[0]
       counterStore.setGlobalData(item)
     }
   })

已上线的小程序

cb1cb7d5c335d5dbc592f2e1cf8d489.jpg

开发历程

在我的另外一篇文章,求一波点赞~

为了计划逃离打工,我开发了一个小程序...

后续

到此为止,已经知道Taro、微信云开发的基本创建和使用了,能满足整体的开发。

如果你还有什么问题不清楚的话,可以评论,或者私信我,再或者加入群聊。

微信群聊:(如果失效了话,可以在小程序中,我会一直更新小程序中的入群二维码。)

image.png