javascript - 在 Options API (Vue Js) 中使用 Composition API
问题描述
是否可以在使用 Options API 的传统组件中导入和使用新的 Composition API?
这是我的场景:
// ComponentA.js
import { reactive } from '@vue/composition-api'
export default {
////////////////////////////////////////////////////////////////
setup() {
//////////////////////////////////////////////
// State
const state = reactive({
isSearching: false,
searchText: '',
isShowMoreResults: false,
resultItems: []
})
//////////////////////////////////////////////
const search = async (searchText) => {
console.log("Searching... ", searchText)
}
//////////////////////////////////////////////
const clear = async () => {
console.log("Clear search")
}
//////////////////////////////////////////////
const nextResults = async () => {
console.log("Next Results")
}
////////////////////////////////////////////////////////////////
return {
state,
search,
clear,
nextResults
}
}
}
我想在我的“选项 API”样式组件中使用它。我怎样才能导入这个?
我试过这个,但它不起作用。导入工作正常,但我不知道如何调用 setup 方法并获取所有导出的字段:
import useComponentA from 'ComponentA.js'
let { state } = useComponentA()
解决方案
您编写的 ComponentA.js 就是组件本身。您返回state
了 ,这将成为$data.state
,以及您的 3 个函数search
、clear
和nextResults
,它们将成为组件上的方法。如果你现在想使用 ComponentA,你只需将它导入到一些使用 ComponentA 的 ComponentB 中,就像这样
// ComponentB
import ComponentA from 'ComponentA.js'
export default {
components: { ComponentA },
// ...
}
如果您要单独使用 Options API 来编写 ComponentA,它将如下所示:
export default {
data() {
return {
isSearching: false,
searchText: '',
isShowMoreResults: false,
resultItems: []
};
},
methods: {
async search() {...},
async clear() {...},
async nextResults() {...}
}
}
在您的 ComponentA 示例中,您根本没有真正使用 Options API。您可以像这样混合使用这两个 API:
// ComponentA.js
import { reactive } from '@vue/composition-api'
export default {
setup() {
const state = reactive({
isSearching: false,
searchText: '',
isShowMoreResults: false,
resultItems: []
})
return { state }
},
methods: {
async search() {...},
async clear() {...},
async nextResults() {...}
}
}
IMO,如果您有一些专门属于组件的逻辑,您只会混合 API。例如,如果您有一些表单组件和一个用于处理该表单唯一的提交事件的方法。虽然它足够新,但实际上并没有标准的约定或最佳实践。
更新:我在这里修改了我的意见。在 Vue.js 中更多地使用 Typescript 之后,Composition API 在组件数据的类型支持方面更加友好。API 还有助于“与相同逻辑关注点相关”的代码“搭配”。请参阅Composition API 文档以了解其推理。总结一下:
- 组合 API 可以在 Typescript 中更好地创作组件
- 组合 API 允许开发人员在复杂组件中“搭配”具有相似逻辑关注点的代码(而不是让它们散布在整个组件中)
诚然,上面的第 2 点不太适用于小型、简单的组件,但如果您使用的是 Typescript,第 1 点仍然非常适用。
推荐阅读
- maven - 在 intelijIdea 中运行 jmockit
- c# - 将日期从日历传递到存储过程但将日期设为 NULL
- ios - 如何限制某些不快速显示滑动删除功能的表格视图单元格
- codeblocks - 如何在代码块上提供自动自定义标题?
- android - 创建安全套接字时 Firebase 实时数据库 Websocket 异常错误
- javascript - 如何在 java 脚本中添加延迟?
- jasper-reports - 地图组件在 Jasper 6.2.0 中不起作用
- excel - 搜索字符串并计算使用列范围找到的特定文本的出现次数
- php - 我想通过评论框插入大文本。我怎样才能在 PHP 中做到这一点?
- python - 基于值计数的命名