• Taro 总结


    1. 页面切换刷新
      1.1 采用将useEffect里面的请求内容修改为在useDidshow里面请求
      1.2 可以采用在页面跳转函数的complete参数里获取要跳转的路由,执行该路由的onLoad方法
    2. 小程序的模板配置内容,可以让后台生成ext.json,前端可以通过Taro.getExtConfigSync()获取配置文件
    3. Taro请求封装,可以将需要写进headers的内容,在拦截器里面写
    // interceptorFun .ts
    import Taro from '@tarojs/taro'
    interface Res {
        code: number
        data: any
        msg: string
    }
    const interceptorFun = function(chain) {
        const requestParams = chain.requestParams
        let errCodeGoSuccess = [50006, 40016]
        return chain.proceed(requestParams).then((res: Taro.request.SuccessCallbackResult<Res>) => {
            const { data, code, msg } = res.data
            if (Number(code) === 0) {
                return data || null
            } else if (errCodeGoSuccess.indexOf(code) > -1) {
                return data || null
            } else {
                Taro.showToast({
                    title: msg,
                    icon: 'none',
                    duration: 2000
                })
                return Promise.reject(msg)
            }
        })
    }
    
    export default interceptorFun
    // req.ts
    Taro.addInterceptor(interceptorFun)
    export const $req: reqFun = params => {
        let contentType = 'application/x-www-form-urlencoded'
        let token = getToken()
        contentType = params.contentType || contentType
        let head = { 'content-type': contentType, 'Store-Id': getStoreId(), 'User-Type': 2 } //'User-Type': 2
        if (token) {
            head['X-Auth-Token'] = token
        }
        const option: Taro.RequestParams = {
            isShowLoading: false,
            loadingText: '正在加载',
            timeout: 15000,
            header: head,
            ...params
        }
    
        return Taro.request(option)
    }
    
    1. 微信登录。
      4.1 Taro.login({sucess:function(res){console.log(res.code)}})
      4.2 登录是需要校验code是否过期,通过Taro.checkSession(),如果没过期,就执行登录逻辑,过期就需要在调用Taro.login(),重新获取code
      4.3 获取手机号需要给button的openType设置为getPhoneNumber
    2. 路由传参,可以通过在路径添加参数,如果内容过多,可以采用redux,在页面内获取。
    3. 路由获取参数,可以通过useRouter,也可以通过getCurrentInstance().router.params 获取
    4. 图片显示,采用require或者import 的方式引入,名字为英文的,中文会出现在真机上看不了
    5. taro分包,主包的页面和内容置于app.config.ts的pages属性里。副包内容置于subPackages
    6. 诱导用户开启权限
    export const authorize = (name, content) => {
        return new Promise(resolve => {
            Taro.getSetting({
                success(setRes) {
                    if (!setRes.authSetting[name]) {
                        Taro.authorize({
                            scope: name,
                            success() {
                                //用户已经同意小程序使用该功能,后续调用 接口不会弹窗询问
                                resolve(true)
                            },
                            fail() {
                                Taro.showModal({
                                    title: '提示',
                                    content: content,
                                    success(modalRes) {
                                        if (modalRes.confirm) {
                                            Taro.openSetting({
                                                success(openRes) {
                                                    if (openRes.authSetting[name]) {
                                                        resolve(true)
                                                    }
                                                },
                                                fail() {
                                                    Taro.showToast({
                                                        title: '调用微信接口失败',
                                                        icon: 'none',
                                                        duration: 2000
                                                    })
                                                    resolve(false)
                                                }
                                            })
                                        }
                                    },
                                    fail() {
                                        Taro.showToast({
                                            title: '调用微信接口失败',
                                            icon: 'none',
                                            duration: 2000
                                        })
                                        resolve(false)
                                    }
                                })
                            }
                        })
                    } else {
                        resolve(true)
                    }
                },
                fail() {
                    Taro.showToast({
                        title: '调用微信接口失败',
                        icon: 'none',
                        duration: 2000
                    })
                    resolve(false)
                }
            })
        })
    }
    
    1. 开发地图获取经纬度需要在app.config.ts中配置
    permission: {
            'scope.userLocation': {
                desc: '你的位置信息将用于小程序位置接口的效果展示' // 高速公路行驶持续后台定位
            }
        },
    
    1. taro小程序自动上传部署
      11.1 安装miniprogram-ci
      11.2 在微信小程序管理后台配置IP白名单以及下载上传密钥
      11.3 添加upload.js
    // upload.js
    const ci = require('miniprogram-ci')
    let { version, desc, appid } = require('./wxConfig')
    
    if (!version) version = 'v1.0.0'
    if (!desc) desc = new Date() + '上传'
    ;(async () => {
        const project = new ci.Project({
            appid: appid,
            type: 'miniProgram',
            projectPath: process.cwd() + '/dist',
            privateKeyPath: process.cwd() + `/private.${appid}.key`,
            ignores: ['node_modules/**/*']
        })
        const uploadResult = await ci.upload({
            project,
            version,
            desc,
            setting: {
                es6: true,
                minify: true
            },
            onProgressUpdate: console.log
        })
        console.log('结果:', uploadResult)
    })()
    

    11.4 package.json 添加脚本命令 "upload": "taro build --type weapp && node config/upload.js"
    12. useState
    12.1 赋初始值不想其他内容改变初始化内容,可以将复杂的内容置于回调函数里return出来,这样就不会频繁变动
    12.2 setState为异步操作,如果需要用到useState后的state值,可以将炒作置于setState里面或者将state设置为该操作的useCallback参数
    13. useEffect
    13.1 初始化请求可以置于里面,类似mounted的生命周期,依赖为[]
    13.2 对于需要destory的操作可以将操作置于useEffect的return 函数,并且依赖为[]
    13.3 如果想update,缓存函数,将函数用useCallback包裹,并置于useEffect里面,可以减少执行次数
    14. useMemo
    14.1 页面子组件不想因为父组件的某个变化了就要重新渲染,可以通过useMemo将组件包裹,减少不必要的开销
    15. redux useReducer useSelect dispatch

  • 相关阅读:
    【持续更新】leetcode算法-数组篇
    【转】敏捷开发之Scrum扫盲篇
    设计Twitter的api
    给一个表达式字符串加括号,计算它的所有的可能的值
    判断一个整数是否是平方数
    Spring Cloud 入门教程(七): 熔断机制 -- 断路器
    断路器(Curcuit Breaker)模式
    Spring Cloud 入门教程(六): 用声明式REST客户端Feign调用远端HTTP服务
    Spring Cloud 入门教程(五): Ribbon实现客户端的负载均衡
    Spring Cloud 入门教程(四): 分布式环境下自动发现配置服务
  • 原文地址:https://www.cnblogs.com/tutao1995/p/14188795.html
Copyright © 2020-2023  润新知