Composablescomposables 的基本使用说明
compostionApi 中我们可以使用 composables 来实现逻辑代码的复用,一个composable 就是一个普通 JavaScript 函数,所有能在 setup 中编写的代码都可以在 composable 当中编写,所以我们就可以把一组相关逻辑的代码放到一起;说明
2. 在 composable 中可以使用 vue 库中提供的所有方法如 ref reactive onMounted provide inject ,每个组件在使用相同的 composable 的时候都不用会互相影响,他们是独立存在的,因为他们是个函数,是通过 return 来返回数据的;
说明
3. 同时一个组件可以使用多个 composables ,并且前面 composables 返回的值,可以作为后面 composables 的参数使用。
说明
composables 是如何使用的composables// 第一步先在 src 根目录下创建一个 composables 文件夹
// 第二步在 composables 文件夹下建立需要抽离代码的 js 文件吗,文件夹名字推荐 use 开头
composables// 定义composables
import { ref } from 'vue'
function userListData() {
// 定义数据
const messages = ref([
{ id: 1, content: "这是一条消息提醒1" },
{ id: 2, content: "这是一条消息提醒2" },
{ id: 3, content: "这是一条消息提醒3" },
{ id: 4, content: "这是一条消息提醒4" },
]);
// 操作方法
function removeMessage(id) {
messages.value = messages.value.filter((msg) => msg.id !== id);
}
// 返回数据和方法
return { messages, removeMessage }
}
// 使用默认方式导出
export default userListDatacomposables// 导入 composables方法
import useListData from 'useListData'
setup() {
// 在setup中调用 useListData 方法, 并把返回值结构出来
const { messages, removeMessage } = useListData()
// 返回方法给 模板使用
return { messages, removeMessage }
}
说明
从上面的代码来看,虽然我们把组件当中的代码抽离出来了,但是里面的数据啊还是写死的,下面我们来处理一下,实现真正意义上的逻辑复用
// 我们让 userListData 接收一个参数, 让使用这个 composables 的组件自行传递数据
import { ref } from 'vue'
function userListData(data) {
// 定义数据
const dataRef = ref(data);
// 操作方法
function removeItem(id) {
dataRef.value = dataRef.value.filter((item) => item.id !== id);
}
... 还可以添加其他的公共函数
// 返回数据和方法
return { data: dataRef, removeItem }
}
// 使用默认方式导出
export default userListData// 导入 composables方法
import useListData from 'useListData'
setup() {
// 这里让使用的组件自行传递数据
// 同时使用结构赋值的重命名语法,给返回的参数重命名
const { data: messages, removeItem: removeMessage } = useListData([
{ id: 1, content: "这是一条消息提醒1" },
{ id: 2, content: "这是一条消息提醒2" },
{ id: 3, content: "这是一条消息提醒3" },
{ id: 4, content: "这是一条消息提醒4" },
])
// 返回方法给 模板使用
return { messages, removeMessage }
}
总结
composables 是一个普通的 js 函数setup 中的代码全部可以放在 composabels 中去编辑composables 逻辑独立越好