vue3.0混合API的使用(二)
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