小程序原生5

三、组件代码特性共享Behavior及计算属性computed

1.Behavior组件间代码共享特性

1.1介绍

behavior是用于组件间代码共享的特性,意思就是定义一部分公共代码特性,每个 behavior 可以包含一组属性、数据、生命周期函数和方法。组件引用它时,它的属性、数据和方法会被合并到组件中,生命周期函数也会在对应时机被调用,方便管理与统一修改. 每个组件可以引用多个 behavior ,behavior 也可以引用其它 behavior

1.2创建

Behavior --- 》 Component
1.开发者自己封装
2.内置(小程序提供的)
3.第三方的

1.3使用

自定义

创建:单独的js文件

const behavior = Behavior({
    // 当前结构和Component的结构保持一致
    properties:{
        behaMsg:{
            type:String,
            value:"我是behavior的prop属性"
        }
    },
    data:{
        behaMsg:"我是behavior的data属性"
    },
    methods:{
        behaClick(){
            console.log("我是behavior的tap事件")
        }
    }
})

module.exports = behavior

使用:1.引入到要使用的组件中,2,进行注册

// components/one/one.js
// 导入behavior
const  common = require("../../behaviors/common");
Component({
    // 注册behavior
    behaviors:[common],
    /**
     * 组件的属性列表
     */
    properties: {
        propMsg:{
            type:String,
            value:"我是组件自己本身的prop属性"
        }
    },

    /**
     * 组件的初始数据
     */
    data: {
        dataMsg:"我是组件自己本身的data属性"
    },

    /**
     * 组件的方法列表
     */
    methods: {
        comClick(){
            console.log("我是组件自己本身的tap事件")
        }
    }
})

1.4内置 behaviors

自定义组件中单个表单组件

自定义组件.wxml

<input type="text" model:value="{{ value }}" placeholder="组件标签-用户名" />

自定义组件.js

Component({
    behaviors:["wx://form-field"],
    data: {
        value:""
    },
})

页面.wxml

<form bindsubmit="formSubmit">
    <my-form name="user" ></my-form>
    <input type="text"  name="pass" placeholder="密码" />
    <radio-group name="sex">
        <radio value="m"></radio>
        <radio value="w"></radio>
    </radio-group>
    <button form-type="submit">提交</button>
</form>

自定义组件中多个表单组件

自定义组件.wxml

<!-- 多个表单组件 -->

<input type="text"  name="name" placeholder="组件标签-用户名" />
<input type="text"  name="pass" placeholder="组件标签-密码" />

自定义组件.js

Component({
    behaviors:["wx://form-field-group"],
})

页面.wxml

<!-- 多个表单组件对额使用 -->
<form bindsubmit="formSubmit">
    <my-form></my-form>
    <radio-group name="sex">
        <radio value="m"></radio>
        <radio value="w"></radio>
    </radio-group>
    <button form-type="submit">提交</button>
</form>

2.computed计算属性

1.1概述

computed是小程序自定义组件扩展 behavior,在小程序组件中,计算属性 computed 和监听器 watch 的实现。在 data 或者 properties 改变时,会重新计算 computed 字段并触发 watch 监听器。目前针对的是component,在页面使用需要引入其他的三方库;

1.2安装

进入小程序端根目录
1.npm init -y
2.npm install --save miniprogram-computed
3.进行构建
	位置:  菜单栏--工具--构建npm
4.正常使用即可

1.3computed 基本用法

// Page 切换成Component构造器
const computedBehavior = require("miniprogram-computed").behavior;
Component({
    behaviors:[computedBehavior], //注册
    properties:{},
    data:{
        numA:1,
        numB:2
    },
    // 在computed不能直接使用this
     computed:{
         sum(data){
            return data.numA + data.numB;
         }
    },
    methods:{
        change(){
            this.setData({
                numA:++this.data.numA,
                numB:++this.data.numB,
            })
        },
      
    }
})

1.4watch 基本用法

// Page 切换成Component构造器
const computedBehavior = require("miniprogram-computed").behavior;
Component({
    behaviors:[computedBehavior], //注册
    properties:{},
    data:{
        numA:1,
        numB:2
    },
    attached(){
        this.setData({
            sum:this.data.numA + this.data.numB
        })
    },
    observers:{

    },
    // watch监听器
    watch:{
        "numA,numB":function(a,b){
            // console.log(a,b)
            this.setData({
                sum:a+b
            })
        }
    },
    methods:{
        change(){
            this.setData({
                numA:++this.data.numA,
                numB:++this.data.numB,
            })
        },

      
    }
})

1.5computed vs watch

从原理上说, `watch` 的性能比 `computed` 更好;但 `computed` 的用法更简洁干净。
此外, `computed` 字段状态只能依赖于 `data` 和其他 `computed` 字段,不能访问 `this` 。如果不可避免要访问 `this` ,则必须使用 `watch` 代替

1.6watch vs observers

无论字段是否真的改变, `observers` 都会被触发,而 `watch` 只在字段值改变了的时候触发,并且触发时带有参数。·

四、工程优化

1.分包

某些情况下,开发者需要将小程序划分成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。每个使用分包小程序必定含有一个主包。所谓的主包,即放置默认启动页面/TabBar 页面,以及一些所有分包都需用到公共资源/JS 脚本;而分包则是根据开发者的配置进行划分。

优势

1.在小程序启动时,默认会下载主包并启动主包内页面,当用户进入分包内某个页面时,客户端会把对应分包下载下来,下载完成后再进行展示。
2.单个分包/主包大小不能超过 2M,整个小程序所有分包大小不超过 20M,能够将工程大小扩充到20M
3.对小程序进行分包,可以优化小程序首次启动的下载时间,以及在多团队共同开发时可以更好的解耦协作。

1.主包
	所谓的主包,即放置默认启动页面/TabBar 页面,以及一些所有分包都需用到公共资源/JS 脚本
2.普通分包
	有自己的分包页面及自己的静态资源;
	
	如果直接进入主包,则只加载主包,但是如果直接进入普通分包,则先加载主包,再去加载分包;
	主包中的数据在普通分包是可以直接使用的;
3.独立分包
	有自己的分包页面及自己的静态资源;
	  "independent": true  设置独立分包,独立分包不依赖于主包;

1.1.配置分包结构

app.json

{
     "subPackages": [
        {
            "root":"pageA",
            "pages": [
                "apple/apple",
                "banana/banana"
            ]
        },
        {
            "root":"pageB",
            "pages": [
                "dog/dog"
            ]
        }
    ]
}

1.2.独立分包

{
    "subPackages": [
        {
            "root":"pageA",
            "pages": [
                "apple/apple",
                "banana/banana"
            ]
        },
        {
            "root":"pageB",
            "pages": [
                "dog/dog"
            ],
            "independent": true // 设置为独立分包
        }
    ]
}

1.3.分包预下载

{
    "pages": [
        "pages/test/test",
        "pages/cart/cart",
        "pages/behavior/behavior",
        "pages/index/index"
    ],
    "subPackages": [{
            "root": "pageA",
            "pages": [
                "apple/apple",
                "banana/banana"
            ]
        },
        {
            "name":"animal",
            "root": "pageB",
            "pages": [
                "dog/dog"
            ],
            "independent": true
        }
    ],
    "preloadRule": {
        "pages/test/test": {
            "network": "all",
            "packages": ["pageA","animal"]
        }
    }
}

2.基础库低版本兼容

小程序的功能不断的增加,但是旧版本的微信客户端并不支持新功能,所以在使用这些新能力的时候需要做兼容。

2.1版本号比较

比较函数

 // 版本号比较
    // v1   基础库版本   2.19.6
    // v2   要求最低版本 2.10.4   2.10.0
    // 返回值  res >=0 支持  res<0 不支持
    compareVersion(v1, v2) {
        v1 = v1.split('.')// [2,19,6]
        v2 = v2.split('.')// [2,10,4]  
        // 获取v1  v2最大长度
        const len = Math.max(v1.length, v2.length)
        // 循环处理,目的是为了保证V1和V2一样长
        while (v1.length < len) {
            v1.push('0')
        }
        while (v2.length < len) {
            v2.push('0')
        }
        // 直接利用循环进行比较 3
        for (let i = 0; i < len; i++) {
            const num1 = parseInt(v1[i])
            const num2 = parseInt(v2[i])
            if (num1 > num2) {
                return 1
            } else if (num1 < num2) {
                return -1
            }
        }
        return 0
    }

执行比较

onLoad(){
        // 获取用户信息
        var v1 = wx.getSystemInfoSync().SDKVersion;
        var v2 = "2.10.4";
        var res = this.compareVersion(v1,v2);
        // console.log(res)
        if(res >=0){
            wx.getUserProfile({
              desc: '123',
              success(){

              }
            })
        }else{
            // 做提示
        }
    },

2.2API 存在判断

参考获取用户信息api

2.3wx.canIUse

wx.canIUse("page-container")

3.骨架屏使用

传统开发:
小程序:	

五、小程序发布

1.设置真实的appid
2.完善小程序的基本信息
	名称,头像,简介,服务类目
3.设置服务器配置
	把所有涉及的数据请求域名在后台配置好(经过备案,https开头)
4.检测代码项目的大小
	分包,不超过20M, (每一个包不能超过2m)
5.微信开发者工具,点击上传

mpvue  vue
wepy   组件化开发
taro   react
uni-app vue语法 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
小程序原生请求接口可以使用小程序内置的wx.request方法,它类似于axios库中的请求方法。以发送GET请求为例,可以按照以下步骤进行操作: 1. 首先,在小程序的页面中,引入wx.request方法,可以使用const关键字进行声明。 2. 创建一个函数,例如sendRequest,用于发送请求。在该函数内部使用wx.request方法发送请求。 3. 在wx.request方法的参数中,设置url参数为请求的接口地址。例如:url: 'https://example.com/api/test'。 4. 设置请求方法为GET,可以通过设置method参数为'GET'。例如:method: 'GET'。 5. 如果有需要,可以设置请求头信息,在header参数中进行设置。例如:header: {'Content-Type': 'application/json'}。 6. 可以设置data参数,传递请求的参数。例如:data: {param1: 'value1', param2: 'value2'}。 7. 在wx.request方法中设置成功回调函数,即当请求成功时执行的操作。可以在success参数中进行设置。 8. 在success回调函数中,通过res.data获取服务器返回的数据,并进行处理。 9. 同样,在wx.request方法中设置失败回调函数,即当请求失败时执行的操作。可以在fail参数中进行设置。 10. 在fail回调函数中,可以通过res.errMsg获取错误信息,并进行处理。 通过以上步骤,可以完成小程序原生的请求接口操作,实现类似axios库中请求的功能。 需要注意的是,小程序的请求接口中有一些限制,例如必须使用https协议,请求的接口必须在小程序后台配置白名单等。同时,小程序内置的wx.request方法与axios可能存在一些差异,具体使用时需要根据开发文档进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值