封装功能模块,增加代码复用
本节对新增学生功能进行封装,代码如下。
composition.vue 组件代码如下。
<template>
<div>
<ul>
<li v-for="(item, i) in stuList" :key="i">
{{ item.id }}--{{ item.name }}
</li>
</ul>
<input type="text" v-model="nameMsg" />
<button @click="addStu">新增</button>
</div>
</template>
<script>
// 1. 把数据封装到 stuList.js
import stuListFn from "../assets/composition/stuList";
// 2. 把方法封装到 stuAdd.js
import stuAddFn from "../assets/composition/stuAdd";
export default {
setup() {
// 默认数据
var stuList = stuListFn();
// 新增数据
var { nameMsg, addStu } = stuAddFn(stuList);
return {
stuList,
nameMsg,
addStu
};
}
};
</script>
stuLis.js 代码如下。
import { reactive } from "vue";
export default function stuListFn() {
//1.使用reactive定义响应式学生列表
var stuList = reactive([
{ id: 1, name: "小明" },
{ id: 2, name: "小红" },
{ id: 3, name: "小强" }
]);
return stuList
}
export default stuListFn
stuAdd.js 代码如下。
import { ref } from "vue";
export default function stuAddFn(stuList) {
var nameMsg = ref("");
var addStu = () => {
stuList.push({ id: stuList.length + 1, name: nameMsg.value });
nameMsg.value = "";
};
return {
nameMsg,
addStu
};
}
代码解析如下。
(1)使用composition API可以把每个功能都组合起来,通俗地讲就是使每个功能模块的代码都是紧靠着的,不会出现数据和业务逻辑分散的情况。 (2)在stuList.js中使用了reactive函数,要注意先引用reactive。 (3)在stuAdd.js中使用了ref函数,要注意先引用ref。