H5W3
当前位置:H5W3 > 其他技术问题 > 正文

vue template 如何模拟 jsx 中的解构 props 特性

我们知道,在 jsx 中可以这样为 props 赋值

const props = {
  a: 1,
  b: 1,
}

render() {
  return (
    <MyComponent {...props} />
  )
}

在 vue 中,虽然我能够这样做

<template>
<my-comp :some-props="props"></my-comp>
</template>

// ...
data() {
  return {
    props: {
      a: 1,
      b: 1,
    },
  },
},

但和上述的区别在于,这样 my-comp 其实只接收了一个 some-props 的 prop, (一个对象属性),而不是像 jsx 那样,获得了 ab 两个 prop (值展开的属性)。

对象属性和展开属性的区别在于,前者不方便做 props 验证。

如果我想实现和 jsx 一样的效果,我就要这样写

<template>
<my-comp :a="props.a" :b="props.b"></my-comp>
</template>

// ...
data() {
  return {
    props: {
      a: 1,
      b: 1,
    },
  },
},

这样写超级烦,因为经常要写好多 prop。

那么问题来了,请问在 vue 中是否可以实现 jsx 中那样的简写呢?

回答:

使用 {...{ props: restProps }}

补充内容:抱歉,没注意看问的是template中写法,上述回答是vue中JSX写法

回答:

使用 v-bind="props"

https://github.com/vuejs/vue/…

回答:

关注一下,另外,这样呢?

<template>
<my-comp :vprops="props"></my-comp> //在组件里直接用vprops.a,vprops.b
</template>

// ...
data() {
  return {
    props: {
      a: 1,
      b: 1,
    },
  },
},

回答:

那就在render函数写jsx 不要写template? 逃

回答:

v-bind.sync=”props”

本文地址:H5W3 » vue template 如何模拟 jsx 中的解构 props 特性

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址