vue渲染render

博客主要介绍了Vue中render函数相关内容。宏观上,它为固定HTML模板提供动态生成操作,比模板语法更接近编译器,可使用js构建DOM。还说明了使用render函数描述虚拟DOM时,vue提供createElement函数,有约定简写h和别名_c,并给出普通vue使用render的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、宏观上展现了Vue整体流程:

 

Vue推荐在绝大多数情况下使用template来创建你的HTML。然而在一些场景中,需要使用JavaScript的编程能力和创建HTML,这就是render函数,它比template更接近编译器。

其实就是为固定的HTML模板提供了动态生成的操作。简单的说,在vue中我们使用模板HTML语法组建页面的,使用render函数我们可以用js语言来构建DOM。

二、如何使用render

当使用render函数描述虚拟DOM时,vue提供一个函数,这个函数是就构建虚拟DOM所需要的工具。官网上给他起了个名字叫createElement。还有约定的简写叫h,vm中有一个方法_c,也是这个函数的别名。

createElement({String-HTML 标签字符串 | Object-组件选项对象 | Function-异步函数})

三、普通vue使用render示例

<script>
    //模板
    var login = {
      template: '<h1>这是登录组件</h1>'
    }

    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {},
     //createElements 是一个 方法,调用它,能够把 指定的 组件模板,渲染为 html 结构
      render: function (createElements) { 
        // 注意:这里 return 的结果,会 替换页面中 el 指定的那个 容器
        return createElements(login)
      }
    });
 </script>

注:通过这种方式,实现了通过js来创建HTML。尤其是有组件时候,这种方式会很方便。

注:在webpack中,需要使用渲染方式。

 

Vue 3 中,使用 `render` 函数渲染图片(`<img>` 标签)是一个常见的需求。Vue 的 `render` 函数允许你通过编程方式构建虚拟 DOM,而不是使用模板语法。 你可以使用 `h` 函数(即 `createElement`)来创建一个 `<img>` 节点,并将其作为组件的 `render` 函数返回值进行渲染。 --- ## ✅ 示例:使用 render 函数渲染图片 ### 基本示例: ```js import { h } from 'vue' export default { render() { return h('img', { src: 'https://example.com/image.jpg', alt: '示例图片', style: { width: '200px', border: '1px solid #ccc', borderRadius: '8px' } }) } } ``` 这个组件会在页面上渲染一张图片。 --- ## ✅ 使用响应式数据动态渲染图片 你可以结合 `ref`、`reactive` 或其他响应式 API 动态控制图片路径或样式。 ```js import { h, ref } from 'vue' export default { setup() { const imageUrl = ref('https://example.com/image.jpg') const width = ref(300) return () => { return h('img', { src: imageUrl.value, alt: '动态图片', style: { width: `${width.value}px`, transition: 'width 0.3s ease' }, onClick: () => { width.value += 50 } }) } } } ``` 点击图片会动态增加宽度。 --- ## ✅ 在组合式 API 中使用 render 渲染图片 你也可以使用 `setup()` 和 `render()` 混合的方式: ```js import { h, ref } from 'vue' export default { setup() { const src = ref('https://example.com/image.jpg') function changeImage(newSrc) { src.value = newSrc } return { src, changeImage } }, render() { return h('img', { src: this.src, alt: '可更换图片', style: { width: '200px' }, onClick: () => this.changeImage('https://example.com/another-image.jpg') }) } } ``` --- ## ✅ 使用 JSX 替代 render 函数(更直观) 如果你使用了 Babel 并启用了 JSX 支持,可以直接写 JSX: ```jsx import { defineComponent } from 'vue' export default defineComponent({ setup() { const src = 'https://example.com/image.jpg' return () => ( <img src={src} alt="JSX 图片" style={{ width: '200px' }} onClick={() => console.log('点击图片')} /> ) } }) ``` > 注意:需要配置 `@vitejs/plugin-vue-jsx` 或 Babel 插件支持 JSX。 --- ## ✅ 使用 props 传递图片地址 ```js import { h } from 'vue' export default { props: ['src'], render() { return h('img', { src: this.src, alt: '来自 prop 的图片', style: { width: '100%', maxWidth: '400px' } }) } } ``` 然后在父组件中使用: ```vue <template> <MyImage src="https://example.com/photo.jpg" /> </template> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良之才-小良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值