vite+vue3

156 阅读1分钟

1. 利用vite创建vue3项目

npm init vite-app projectName
安装依赖运行项目:

cd projectName
npm install
npm run dev
复制代码

2. Vue3 练习代码

App.vue

<template>
  <img alt="Vue logo" src="./assets/logo.png" />
  <br />
  <input type="text" v-model="msg" />
  <button @click="updateMsg">改变msg</button>
  <br />
  {{ msg }}
  <br />
  <p @click="change">{{ flag }}</p>
  <hr />
  <button @click="updateName">修改姓名</button> *
  <button @click="delAge">删除年龄</button> *
  <button @click="addSchool">新增学校</button>
  <p>姓名:{{ obj.name }}</p>
  <p>年龄:{{ obj.age }}</p>
  <p>学校:{{ obj.school }}</p>
  <hr />
  <p>父子组件传值,点击子改父</p>
  <comp-b :str="str" @changezi="changezi"></comp-b>
  <hr />
  <p>计算属性和侦听器</p>
  <p @click="changeStr1">{{ str1 }}</p>
  <p>{{ str3 }}</p>
  <hr />
  <p>组件通信</p>
  <comp-a></comp-a>
</template>

<script>
import CompB from "./components/CompB.vue";
import CompA from "./components/CompA.vue";
import { ref, reactive, computed, watch, provide } from "vue";
export default {
  name: "App",
  components: {
    CompB,
    CompA,
  },
  // setup函数执行的顺序比beforeCreate要早
  setup: function () {
    // ref 响应式
    // 基本数据类型使用ref (Undefined、Null、Boolean、Number、String、Symbol)

    let msg = ref("hello,sun");
    let flag = ref(true);
    function updateMsg() {
      // 修改ref的数据需要.value
      msg.value = "我修改了msg";
    }
    function change() {
      flag.value = !flag.value;
    }
    // 引用数据类型使用reactive(Object、Array、Date 、RegExp、Function )
    let obj = reactive({
      name: "张三",
      age: 30,
    });
    // 组件通信 provide(数据名,数据值)
    provide("info", obj);

    // 对引用数据类型进行监听
    watch(obj, (newV) => {
      console.log("新值:" + JSON.stringify(newV));
    });

    // 监听对象某一属性,需要用箭头函数的形式如:() => obj.name
    watch(
      () => obj.name,
      (newV, oldV) => {
        console.log("新值:" + newV);
        console.log("旧值:" + oldV);
      }
    );

    function updateName() {
      obj.name = "李斯";
    }
    function delAge() {
      delete obj.age;
    }
    function addSchool() {
      obj.school = "北大";
    }

    // 父子传值,子改父
    let str = ref("knock,knock");
    function changezi(val) {
      str.value = val;
    }

    // 计算属性
    let str1 = ref("落花时节");
    let str2 = ref("又逢君");
    let str3 = computed(() => {
      return str1.value + str2.value;
    });
    function changeStr1() {
      str1.value = "花开河畔";
    }
    //  使用watch 监听基本数据类型.{immediate:true}一进入页面就监听
    watch(
      str1,
      (newV, oldV) => {
        console.log("新值:" + newV);
        console.log("旧值:" + oldV);
      },
      { immediate: true }
    );
    return {
      str1,
      str2,
      str3,
      msg,
      flag,
      obj,
      str,
      updateMsg,
      change,
      updateName,
      delAge,
      addSchool,
      changezi,
      changeStr1,
    };
  },
};
</script>
复制代码

组件A

<template>
  <h2>{{ mes }}</h2>
</template>

<script>
import { inject } from "vue";
export default {
  setup() {
    const mes = inject("info");
    return {
      mes,
    };
  },
};
</script>
复制代码

组件B

<template>
  <!-- vue3支持多个根元素 -->
  <h1 @click="changeZ">{{ str }}</h1>
</template>

<script>
export default {
  name: "CompB",
  props: ["str"],
  //   ★setup里this 指向vue实例
  setup(props, { emit }) {
    //  在setup中使用props的数据,要借助方法的第一个参数
    console.log(props.str);
    // 在setup中子改父需要借助方法的第二个参数
    function changeZ() {
      emit("changezi", "open the door");
    }
    return {
      changeZ,
    };
  },
};
</script>