Skip to content

Vue2

目录


Vue2的背景是在一个功能相对较少的 node版本下,通过大量的语法糖和规范,来解决这些问题

比如 数组修改不能用索引,就用 push或者 Vue.set 来解决这个问题。

复用

在 Vue2 中:

  • 如果两个分支的元素类型相同
  • 且没有 key

Vue 会尝试复用,只更新它们的属性和文本

杂笔

Vue太抽象了

又能用jsx 又能用vue木板代码。template 由 Vue 编译器解析,TSX/JSX 由 (TypeScript) + Babel 解析

导致你可以在一个文件里面用2种 html衍生模板语法

模板语法 里面又可以用 v-html插入html

实际上用的还是render ,通过木板编译器支持将模板语法转为 render语法

<p>{{ message }}</p> => h('p', this.message)

所以 模板语法也是Vue的特色之一啊


render不仅可以写 jsx ,还可以用 h函数来组装结构

jsx

render() {
    return h('img', { attrs: { src: this.imageUrl } })
}

// 等价于
render() {
    return <img src={this.imageUrl} />
}

虽然用了 jsx但又不完全jsx

东西都得写在

jsx
Vue.component("MyComponent", {
  render() {
    return <div>{this.message}</div>;
  },
});

动态数据需要定义在 data/computed/methods/…… 中,在注册的时候交由Vue来处理


然后神秘的事情来了

你的 Vue 组件某个参数(假设叫 content )支持 solt / funtion / string 3中方式传入数据

请问你有几种方式传入数据?

vue
<script lang="tsx">
// 导入 Button
import { CreateElement } from "vue";
import { Button } from "@gt4/design";

export default {
  data() {
    return {
      message: "v-bing 指令传入 string",
    };
  },
  render(h: CreateElement) {
    // JSX语法传入 string(待验证)
    return <Button content="asdaadas" />;
    // JSX语法传入 function(待验证)
    return <Button content={() => <div>123</div>} />;
    // h函数传入 function(待验证)
    return h("Button", {
      props: {
        content: () => h("p", "这是段落文本"),
      },
    });
  },
};
</script>
<template>
  <div class="flex gap-4">
    <!-- 静态传入 string -->
    <t-button content="静态传入 string" />
    <!-- v-bing指令传入 string -->
    <t-button v-bind:content="message" />
    <!-- v-bing指令传入(语法糖) string -->
    <t-button :content="message" />
    <!-- 插槽传入(如果参数名称是default) solt -->
    <t-button>
      <span>插槽传入(如果参数名称是default) solt</span>
    </t-button>
    <!-- 具名插槽传入 solt -->
    <t-button>
      <template v-slot:content>
        <span>具名插槽传入 solt</span>
      </template>
    </t-button>
    <!-- 具名插槽(语法糖)传入 solt -->
    <t-button>
      <template #content>
        <span>具名插槽(语法糖)传入 solt</span>
      </template>
    </t-button>
  </div>
</template>

服啦!

Copyright © 2022 田园幻想乡 浙ICP备2021038778号-1