vue3.0混合API的使用(二)

vue

vue2.x存在的问题

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

vue3.0推出使用混合API

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

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

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。

 

以上是 vue3.0混合API的使用(二) 的全部内容, 来源链接: utcz.com/z/375401.html

回到顶部