zoukankan      html  css  js  c++  java
  • vue3.0混合API的使用(二)

    vue2.x存在的问题

    在vue2.x中,对一个功能模块的处理一般是将数据定义在data中,方法定义在methods。如果这个页面内容方法过多,就不太利于代码阅读和维护。

    vue3.0推出使用混合API

    在vue3.0中,可以使用setup函数,将变量和方法都写在这个函数中,还可以将这个功能模块抽离到另一个js文件中,增加了代码的可阅读性,让别人知道你这个js文件的作用。在后面可能出现bug,也有利于他人维护。

    在使用setup函数时,先介绍2个新的属性refreactive。

    ref:监听简单数据类型的改变。

    reactive:监听符合类型数据的改变。

    Demo

    这里以一个展示用户、新增用户、删除用户为例

    vue界面

    <template>
      <div>
        <form>
          <input type="text" v-model="state2.users.id" />
          <input type="text" v-model="state2.users.name" />
          <input type="submit" @click="addUser" />
        </form>
        <ul v-for="(item, index) in state.userInfo" :key="index">
          <li @click="removeUser(index)">{{ item.id }}--{{ item.name }}</li>
        </ul>
      </div>
    </template>
    
    <script>
    import { reactive } from "vue";
    import UserController from './UserController.js';
    export default {
      setup() {
        let state = reactive({
          userInfo: [
            { id: 1, name: "张三" },
            { id: 2, name: "李四" },
            { id: 3, name: "王五" },
          ],
        });
        let state2 = reactive({
          users: {
            id: "",
            name: "",
          },
        });
        let { removeUser, addUser } = UserController(state, state2);
        return { state, state2, removeUser, addUser };
      },
    };
    </script>

    被单独抽离出的js文件(UserController)

    function UserController(state, state2) {
        function removeUser(index) {
            state.userInfo = state.userInfo.filter((item, i) => i !== index);
        }
        function addUser(e) {
            e.preventDefault();
            const user = Object.assign({}, state2.users);
            state.userInfo.push(user);
            state2.users.id = "";
            state2.users.name = "";
        }
        return { removeUser, addUser };
    }
    export default UserController;

    这样抽离出来后,阅读user相关功能模块就只需关注UserController这个js文件即可。

    混合API实质

    混合API实质其实也是将在setup中return的时候注入到data和methods中。

    setup注意点

    setup函数执行时机:setup是在beforecreate前插入,而data和methods是在created之后才挂载到vue实例中,因此在setup中是无法使用data和methods的。

    setup函数中的this:因为无法使用data和methods所以setup为了避免错误使用this,直接将this赋undifined。

    setup函数中无法使用异步函数,也就是无法在setup前面加入async。

     

  • 相关阅读:
    CSS 定位position
    new Date(time).getTime()在ios返回NaN
    babel.js 文件 browser.min.js
    export 和 export default 的区别
    第一个webpack例子demo1
    Kafka源码解析与实战
    Redis实战
    RabbitMQ实战
    Spring源码理解
    Java并发编程实践
  • 原文地址:https://www.cnblogs.com/pipim/p/14270922.html
Copyright © 2011-2022 走看看