Code Monkey home page Code Monkey logo

tua-mp's People

Contributors

buptsteve avatar evinma avatar imgbotapp avatar lauigi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tua-mp's Issues

数组优化

使用数组的 __proto__,而不是修改每一个数组数据的方法

数组中嵌套较深的元素没有继承依赖

例如以下这种情况下 stringifyArr 不会更新

TuaPage({
    data () {
        return {
            arr: [
                { c: { d: 'd0' } },
                { c: { d: 'd1' } },
                1, 2, 3,
            ],
        }
    },

    computed: {
        stringifyArr () {
            return JSON.stringify(this.arr, null, 4)
        },
    },

    created () {
        this.arr[0].c.d = 'new value'
    }

并且 computed 初始化过早,少了 undefined 的步骤...

setter 中插入的新值没有被观察

this.arr = [{ msg: 123 }]  // 虽然数组改变了,但是没有观察这个数组
this.arr[0].msg = 'new val' // 无法触发 setter

同理替换对象也没有被观察,修复的话只需要在 defineReactive 中调用 observeDeep 观察新值即可。

兼容原生 setData

目前没有处理原生 setData,导致直接跑旧代码的时候不绑定这些数据,其实可以代理一下原生的 setData...

1.保留字和重名数据的提醒 2.生命周期钩子

1.通过保留字数组简单限制 data、computed 和 methods 中的名称

2.兼容 Vue 生命周期方法

在 setData 前调用 beforeUpdate,在 setData 回调中调用 updated

Page

  • onLoad: beforeCreate -> onLoad -> created
  • onReady: beforeMount -> onReady -> mounted
  • onShow: 无
  • onHide: 无
  • onUnload: beforeDestroy -> onUnload -> destroyed

Component

  • created: beforeCreate -> created
  • attached: beforeMount -> attached
  • ready: ready -> mounted
  • moved: 无
  • detached: beforeDestroy -> detached -> destroyed

调用 wx.relaunch 后报错

image

因为在 0.6.5 版本中复用被观察的对象,并且在 onLoad 中用的还是上一次初始化时计算的 data,导致报错。只要在 onLoad 时再计算一次 data 即可

单文件组件

  • 像 Vue 一样支持单文件组件,使用一个文件编写 wxml/wxs/wxss
  • 更进一步地,适配 Vue 风格的模板写法
  • 模板适配小程序组件

computed里面object得到的疑问

当data 里时时object时 在computed里

得到这种形式的

{__TUA_PATH__: "c", __dep__: Dep}

这样比如我在data 定义一个Date 就在computed里无法操作其中的方法

export default {
    data() {
        return {
            date: Date.now(),
            g: new Date(),
            b: new Object(),
            c: {
                a: 1
            }
        }
    },
    computed: {
        now () {
            console.log(this.g.now, this.b, this.c);
            return new Date(this.date);
        }
    }
 }

feat(cli): auto generate index.d.ts for apis

你的功能请求是否与某些问题相关?请描述
目前生成的 api 在编辑器中完全没有提示。

描述您想要的解决方案

  • 根据导出的 api 自动生成声明文件(index.d.ts),这样在导入并调用接口时编辑器能够智能提示有哪些参数、是否必传。

新增命令 declare,读取导出的 apis 自动生成 index.d.ts

$ tuamp declare [apisPath]
# OR
$ tuamp d [apisPath]
  • apisPath 默认值为 src/apis/index.js
  • index.d.ts 生成在 apisPath 同级目录下

由于使用 require 读取导出 apis 对象的文件,所以可能会碰到 alias 问题。例如项目中设置了 @ 作为 ./src/ 的别名。虽然 @tua-mp/cli 已内置了一些 alias,但你仍然可以自由配置。

tua.config.js 中的 alias 选项会透传给 babel-plugin-module-resolver,例如将 foobar 指向 './src/foobar' 可以这么配置:

// tua.config.js
module.exports = {
    alias: {
        'foobar': './src/foobar',
    },
}

响应的声明下个版本再规划

  • 更进一步,可以根据 mock 属性,结合 json2ts,生成接口响应的声明。

computed 函数被误触发了多次

  • 依赖收集完成后,在依赖源没有变化的情况下,不应该触发 computed 进行重复计算。原因已找到...
  • 初始化时 computed 函数被误触发了多次

依赖收集

实现依赖收集,这样就不会在每次 data 数据更新的时候重新计算整个 computed,进一步提高性能

支持页面级 comps/ 结构

目前的组件都放在 src/comps/ 下,但其实一些组件非公用,应该放在自己的 pages/ 文件夹下。

feat(cli): 支持自定义模板

问题
当前虽然已有默认模板,但是假如升级模板就必须升级包。

方案
因此打算支持项目级别的自定义模板功能。在没有配置文件时,使用内置默认模板。

  • 为了保持多端的通用性,决定以后优先读取 tua.config.js,没有时再找 tua-mp.config.js
  • 可配置的选项有 templateDir,即所有模板文件夹的路径,默认值为 .templates
module.exports = {
    templateDir: 'some/path',
}
  • 新增 eject 命令将默认模板导出
$ tuamp eject
# OR
$ tuamp e

指定模板下次再做吧...

  • [ ] 对于所有 add 命令新增 -t, --template 选项,用于指定模板
$ tuamp add api --template=<template> <name>
$ tuamp add page -t=<template> <name>
$ tuamp add comp -t=<template> <name>
$ tuamp add comp -t=<template> -g <name>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.