框架语法对比

小程序使用对比

微信小程序

project.config.json         -- 小程序项目配置文件:比如构建方式(es6、postcss等)、appid、项目名称等
app.json                    -- app.json 是当前小程序的全局配置,包括了小程序的所有页面路径、界面表现、网络超时时间、底部 tab 等
       /**   文件内容示例
        *    {
        *      "pages":[ // 路径
        *        "pages/index/index",
        *        "pages/logs/logs"
        *      ],
        *      "window":{
        *        "backgroundTextStyle":"light",
        *        "navigationBarBackgroundColor": "#fff",
        *        "navigationBarTitleText": "WeChat",
        *        "navigationBarTextStyle":"black"
        *      },
        *      "tabBar": {
        *         "color": "#999999",
        *         "selectedColor": "#000000",
        *         "backgroundColor": "#ffffff",
        *         "list": [
        *           {
        *            "pagePath": "pages/index/index",
        *            "text": "信息流",
        *            "iconPath": "/static/feedUnselected.png",
        *            "selectedIconPath": "/static/feed.png"
        *          }
        *        ]
        *      }
        *    }
        */
app.js                    -- 小程序入口,调用App()函数注册小程序
       /** 文件内容示例
        *  App({
        *   onLaunch: function () { } // 监听小程序初始化,全局只触发一次
        *  })
        */
app.wxss                  -- wxss 在css上面扩充了一个自适应单位 rpx,整个屏幕宽度为750rpx;扩展了 @import "common.wxss"; 方法可引入wxss文件
/pages
    /index                -- 页面目录,这就比较随意了,直接放在pages下面也是阔以的;一个小程序页面包含 js/wxml/wxss/json 四个文件
        index.js          -- 在其中调用Page()方法初始化页面
               /** 文件内容示例
                *  Page({
                *      data: {        -- data 是页面第一次渲染使用的初始数据。
                *        list: []     -- 在wxml中可使用 {{ list }} 来获取
                *      },
                *      onLoad: function (query) { -- 页面加载时触发。一个页面只会调用一次,可通过query对象获取传递过来的参数
                *         wx.showToast({
                *            title: '鹊桥测试',
                *            icon: 'none',
                *            duration: 1000
                *          });
                *      },
                *     categoryChange: function(event) {
                *        this.setData({
                *          noIndex: event.detail.value
                *        });
                *      }
                *  })
                */
        index.wxml        -- 自定义的一套页面模板
        index.wxss
        index.json        -- 页面配置
              /** 文件内容示例
                *  {
                *    "navigationBarTitleText": "自定义导航标题",
                *    "usingComponents": { // 自定义组件
                *      "Content": "/pages/index/components/content"
                *    }
                *  }

    /log
/utils
    utils.js

自定义组件

微信小程序中的自定义组件也需要包含 js、wxml、wxcss【非必须】、json【非必须】四部分,JS 中需要调用 Component()方法进行初始化,例如:

// pages/index/components/content.js
Component({
  properties: {  -- 对外暴露的参数
    content: {   -- 每个参数包含type类型value初始值observer值变化时响应函数三部分
      type: Object,
      observer: function (newVal, oldVal, changedPath) {
        console.log(newVal);
        this.setData({
          content: newVal
        });
      }
    },
    config: {   -- 暴露的参数在wxml中可以通过 {{content}} 来获取
      type: Object,
      observer: function (newVal, oldVal, changedPath) {
        this.setData({
          config: newVal
        });
      }
    }
  },
  data: {}     -- 组件内部数据 data,
  methods: {}  -- 组件中的方法
})

自小程序基础库版本 2.2.3 版本开始,组件的的生命周期也可以在 lifetimes 字段中定义,且优先级最高。

  • created 组件实例刚刚被创建时执行,此时不能调用 setData
  • attached 在组件实例进入页面节点树时执行
  • ready 在组件布局完成后执行
  • moved 在组件实例被移动到节点树另一个位置时执行
  • detached 在组件实例被从页面节点树移除时执行

在组件中可通过 pageLifetimes 来定义页面生命周期触发时组件的行为:

  • show 组件所在的页面被展示时执行
  • hide 组件所在的页面被隐藏时执行
  • resize 组件所在的页面尺寸变化时执行,会传入 size

将组件传入自定义组件作为子组件,在 wxml 中提供了 slot 组件来替代传入的子组件(对应 react 中的 this.props.children),如果有多个 slot,则需要在组件的配置文件中 options 字段中开启 multipleSlots 为 true。

淘宝小程序

app.json                    -- app.json 是当前小程序的全局配置,包括了小程序的所有页面路径、界面表现、网络超时时间、底部 tab 等
       /**   文件内容示例
        *    {
        *      "pages":[ // 路径
        *        "pages/index/index",
        *        "pages/logs/logs"
        *      ],
        *      "window":{
        *        "backgroundTextStyle":"light",
        *        "navigationBarBackgroundColor": "#fff",
        *        "navigationBarTitleText": "WeChat",
        *        "navigationBarTextStyle":"black"
        *      },
        *      "tabBar": {
        *         "color": "#999999",
        *         "selectedColor": "#000000",
        *         "backgroundColor": "#ffffff",
        *         "list": [
        *           {
        *            "pagePath": "pages/index/index",
        *            "text": "信息流",
        *            "iconPath": "/static/feedUnselected.png",
        *            "selectedIconPath": "/static/feed.png"
        *          }
        *        ]
        *      }
        *    }
        */
app.js                    -- 小程序入口,调用App()函数注册小程序
       /** 文件内容示例
        *  App({
        *   onLaunch: function () { } // 监听小程序初始化,全局只触发一次
        *  })
        */
app.acss                  -- acss 在css上面扩充了一个自适应单位 rpx,整个屏幕宽度为750rpx;
/pages
    /index                -- 页面目录,这就比较随意了,直接放在pages下面也是阔以的;一个小程序页面包含 js/axml/acss/json 四个文件
        index.js          -- 在其中调用Page()方法初始化页面
               /** 文件内容示例
                *  Page({
                *      data: {        -- data 是页面第一次渲染使用的初始数据。
                *        list: []     -- 在axml中可使用 {{ list }} 来获取
                *      },
                *     categoryChange: function(event) {
                *        this.setData({
                *          noIndex: event.detail.value
                *        });
                *      }
                *  })
                */
        index.axml        -- 自定义的一套页面模板
        index.acss
        index.json        -- 页面配置
              /** 文件内容示例
                *  {
                *    "navigationBarTitleText": "自定义导航标题",
                *    "usingComponents": { // 自定义组件
                *      "Content": "/pages/index/components/content"
                *    }
                *  }

支付宝小程序

app.json                    -- app.json 是当前小程序的全局配置,包括了小程序的所有页面路径、界面表现、网络超时时间、底部 tab 等
       /**   文件内容示例
        *    {
        *      "pages":[ // 路径
        *        "pages/index/index",
        *        "pages/logs/logs"
        *      ],
        *      "window":{
        *        "backgroundTextStyle":"light",
        *        "navigationBarBackgroundColor": "#fff",
        *        "navigationBarTitleText": "WeChat",
        *        "navigationBarTextStyle":"black"
        *      },
        *      "tabBar": {
        *         "color": "#999999",
        *         "selectedColor": "#000000",
        *         "backgroundColor": "#ffffff",
        *         "list": [
        *           {
        *            "pagePath": "pages/index/index",
        *            "text": "信息流",
        *            "iconPath": "/static/feedUnselected.png",
        *            "selectedIconPath": "/static/feed.png"
        *          }
        *        ]
        *      }
        *    }
        */
app.js                    -- 小程序入口,调用App()函数注册小程序
       /** 文件内容示例
        *  App({
        *   onLaunch: function () { } // 监听小程序初始化,全局只触发一次
        *  })
        */
app.acss                  -- acss 在css上面扩充了一个自适应单位 rpx,整个屏幕宽度为750rpx;
/pages
    /index                -- 页面目录,这就比较随意了,直接放在pages下面也是阔以的;一个小程序页面包含 js/axml/acss/json 四个文件
        index.js          -- 在其中调用Page()方法初始化页面
               /** 文件内容示例
                *  Page({
                *      data: {        -- data 是页面第一次渲染使用的初始数据。
                *        list: []     -- 在axml中可使用 {{ list }} 来获取
                *      },
                *     categoryChange: function(event) {
                *        this.setData({
                *          noIndex: event.detail.value
                *        });
                *      }
                *  })
                */
        index.axml        -- 自定义的一套页面模板
        index.acss
        index.json        -- 页面配置
              /** 文件内容示例
                *  {
                *    "navigationBarTitleText": "自定义导航标题",
                *    "usingComponents": { // 自定义组件
                *      "Content": "/pages/index/components/content"
                *    }
                *  }

自定义组件

支付宝小程序中的自定义组件也需要包含 js、axml、acss【非必须】、json【非必须】四部分,JS 中需要调用 Component()方法进行初始化,例如:

// pages/index/components/content.js
Component({
  mixins: [{ didMount() {} }],
  data: { y: 2 },
  props: { x: 1 },
  didUpdate(prevProps, prevData) {},
  didUnmount() {},
  methods: {
    onMyClick(ev) {
      my.alert({});
      this.props.onXX({ ...ev, e2: 1 });
    }
  }
});

自定义的组件的生命周期:

  • didMount 首次被渲染,通常在这时请求服务端数据
  • didUpdate 组件被更新,一般是组件数据变更
  • didUnmount 自定义组件被卸载
上一页
下一页