如何在Vue3中使用渲染函数

xpcnnkqh  于 2022-12-04  发布在  Vue.js
关注(0)|答案(3)|浏览(200)

我使用Vue 3.1.1
我在实验阶段使用脚本设置,使用单文件组件。使用脚本设置,我理解defineProps、defineEmit和useContext,但我不理解如何使用render函数。

<script lang="ts" setup>
import { defineProps } from 'vue'

const props = defineProps<{
    text: string
}>()

const handleClick = () => {
    console.log('click!!')
}

// Render function...

/* The template I want to create.
    <button
        class="btn btn-primary"
        type="button"
        @click="handleClick"
    >
        {{ props.text }}
    </button>
*/
</script>
vuktfyat

vuktfyat1#

试试看。

<script lang="tsx" setup>
  import { h } from 'vue';

  const render = () => {
    return h('div', []);
  };

  const jsxNode = () => {
    return <div> text </div>;
  };
</script>
<template>
  <render />
  <jsxNode />
</template>
xeufq47z

xeufq47z2#

尝试使用h函数创建元素,然后在模板部分中呈现它,如下所示:

<script setup lang="ts">
import { ref,h } from 'vue'

const props = defineProps<{
    text: string
}>()

const handleClick = () => {
    console.log('click!!')
}

const root=h('button',
             {type:'button',onClick:handleClick,class:'btn btn-primary'},props.text)

</script>

<template>
  <root/>             
</template>

演示

lnxxn5zx

lnxxn5zx3#

您可以尝试额外的正常脚本。

<script lang="tsx" setup>
import { defineProps, defineExpose } from 'vue'

const props = defineProps<{
    text: string
}>()

const handleClick = () => {
    console.log('click!!')
}
defineExpose({
  handleClick,
  // other data,method
})
</script>

<script lang="tsx">
import { defineComponent } from 'vue'

export default defineComponent({
  render() {
    return (
      <button
        class="btn btn-primary"
        type="button"
        onClick={this.handleClick}
      >
        {{ this.text }}
      </button>
    )
  }
})
</script>

除 prop 外的任何数据、方法都应使用defineExpose进行曝光。
顺便说一句,安装脚本和正常脚本应该有相同的lang属性。

相关问题