当前位置: 首页 > 知识库问答 >
问题:

是否可以将Vue 3与组合API和Vue类组件一起使用?

皮承基
2023-03-14

在过去的8个月里,我们使用vue 3和类组件构建了一个项目,但似乎不再维护它,我们希望逐渐切换到组合API,更准确地说是切换到设置脚本语法。

我们目前正在使用vue3。0.0和vue类组件8.0.0。

我们的目标是,因为我们必须不断向项目添加新功能,开始使用composition API创建新组件,同时保留那些已经使用vue class component编写的组件。而且,在我们继续的过程中,我们将尝试用合成API重写它们。

我尝试使用vue类组件创建一个简单的HelloWorld组件:

<template>
 <div>
   <TestComponent :test="'test string'" />
 </div>
</template>

<script lang="ts">
import { Options, Vue } from 'vue-class-component';
import TestComponent from './TestComponent.vue';

@Options({
 components: { TestComponent }
})
export default class HelloWorld extends Vue {
}
</script>

并添加一个测试组件:

<template>
  <h1>Test composant {{ test }}</h1>
</template>

<script lang="ts">
export default {
  name: 'TestComponent',
  props: { test: {type: String, required: true }},
  setup(props: { test: string }, context: unknown) { console.log(context); return { test: props.test } }
}
</script>

但是,我在代码中出现了一个错误:当在HelloWorld中声明TestComponent时,编译器告诉我他期待TestComponent中声明的参数“test”:

Argument of type '{ name: string; props: { test: StringConstructor; required: boolean; }; setup(props: { test: string; }, context: unknown): { test: string; }; }' is not assignable to parameter of type 'Component<any, any, any, ComputedOptions, MethodOptions>'.
  Type '{ name: string; props: { test: StringConstructor; required: boolean; }; setup(props: { test: string; }, context: unknown): { test: string; }; }' is not assignable to type 'ComponentOptions<any, any, any, ComputedOptions, MethodOptions, any, any, any>'.
    Type '{ name: string; props: { test: StringConstructor; required: boolean; }; setup(props: { test: string; }, context: unknown): { test: string; }; }' is not assignable to type 'ComponentOptionsBase<any, any, any, ComputedOptions, MethodOptions, any, any, any, string, {}>'.
      Types of property 'setup' are incompatible.
        Type '(props: { test: string; }, context: unknown) => { test: string; }' is not assignable to type '(this: void, props: Readonly<LooseRequired<any>>, ctx: SetupContext<any>) => any'.
          Types of parameters 'props' and 'props' are incompatible.
            Property 'test' is missing in type 'Readonly<LooseRequired<any>>' but required in type '{ test: string; }'.ts(2345)
TestComponent.vue.ts(5, 18): 'test' is declared here.

更新:我试图在main中全局注册TestComponent。ts,但错误仍然是一样的

有没有办法让两者协同工作?

共有2个答案

公孙巴英
2023-03-14

请注意,:testv-bind:test的语法糖,这意味着如果没有:test的反应变量绑定,应该使用test。见下文:

// note there is no colon before test, which means you are just passing a constant string.
<TestComponent test="test string" />
吴浩皛
2023-03-14

一个问题是您的props声明不正确。应该是:

// ❌ invalid
// props: {
//   test: String,
//   required: true
// },

props: {
  test: {
    type: String,
    required: true
  }
},

此外,您不需要键入setup()的参数,因为它们通常是从defineComponent()实用程序推断出来的,该实用程序在Vue组件中启用类型推断:

// export default {
//   setup(props: { test: string }, context: unknown) { /*...*/ }
// }

import { defineComponent } from 'vue'
export default defineComponent({
  setup(props, context) { /*...*/ }
})
 类似资料:
  • 我用这个包裹https://www.npmjs.com/package/vue-sweetalert2我想通过vue中的vue组件。以html的形式浏览。 但什么都没有。我是VueJs新手,我仍然不完全理解如何将组件作为html插入。

  • 我想让flume代理位于hadoop集群之外,并想知道是否有可能使用flume通过WebHDFS向hadoop集群发送消息。 如果没有,是否有使用WebHDFS的替代方案?使用多层水槽层仍然需要我在hadoop集群中运行水槽代理。

  • 问题内容: 1个 结果集 : 2个 结果集2: 有没有办法可以做到这一点: 我想在RHEL 5上使用Sybase 12.5的解决方案,我也想知道在其他任何数据库系统中是否可行。 -–谢谢您的回答- 问题答案: 通过为该列使用CASE / WHEN并基于true / false求和1或0,您可以在同一查询中获得这两者。此外,如果您希望将另一个值的总和作为另一个,则可以执行相同的操作列…只需将其替换为

  • 是否可以在AWS Lambda中构建一个函数来创建websocket并将数据发送到订阅的应用程序? 类似这样: John在他的手机中打开了应用程序SuperPhotoApp,但决定使用桌面浏览器将照片上传到SuperPhotoApp服务(S3 Bucket),此事件执行创建套接字的Lambda函数。io服务器并将更新推送到所有订户,他的手机打开了应用程序,因此应用程序会自动更新新照片。 这可以通过

  • 问题内容: 我对正则表达式很糟糕,但是我想知道是否可以将ng-pattern与变量一起使用 例如, 其中validationCode是控制器中附加到$ scope的变量 如果 则ng-pattern将是 但这不起作用,似乎我需要创建一个我真的不想要的自定义指令 问题答案: 需要一个正则表达式。 从Angular的文档中有关: 如果该值与模式表达式不匹配,则设置模式验证错误键。期望值用于内联模式或定

  • 我对Spring webflux和protobuf都是新手。我一直在读一些东西,我发现它们之间有一些相似之处。喜欢 Spring webflow可以部署在netty上,gRPC也是如此。 两者都适用于流数据。 这两个框架都在某种程度上基于观察者设计模式,支持基于均匀的数据处理方法。 然而,我仍然找不到任何结合webflux(反应式编程)、gRPC(更快的数据编码和解码)和Spring(依赖注入)功