render函数的理解和简单使用

Vue 推荐在绝大多数情况下使用模板来创建你的 HTML。然而在一些场景中,你真的需要 JavaScript 的完全编程的能力。这时你可以用渲染函数,它比模板更接近编译器。

详细可参考vue官方文档

1.template写法

此处省略html结构,参考下一步

<script type="text/javascript">
	vue.component('ele',{
    
    
		template: '<div id="element" :class="{show:show}" @click="handleClick">标签内的文本内容</div>',
		data() {
    
    
			return {
    
    
				show:true
			}
		},
		methods: {
    
    
			handleClick() {
    
    
				console.log('clicked !');
			}
		}
	})
	var vm = new Vue({
    
    
		// 管理边界->选取目标 
		el:'#app',
	    // data 存放数据
		data:{
    
    
			name:'测试',
		}
		
	})
</script> 

1.render函数的createElement()介绍

Render 函数通过 createElement 参数来创建 Virtual Dom ,createElement 构成了 Vue Virtual Dom 模板,它有3个参数:

  • 第一个参数必选,可以是 HTML 标签,也可以是 个组件或函数;
  • 第二个是数据对象,可选参数,在 template 中使用。
  • 第三个是子节点,也是可选参数,用法一致。

下面是render函数的详细写法:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript" src="js/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<ele></ele>
		</div>
		<script type="text/javascript">

			Vue.component('ele',{
     
     
				render: function(createElement) {
     
     
					// console.log(createElement);
					return createElement(
						// 第一个参数 html标签 也可以是组件 或 函数
						'div',
						//第二个参数 数据对象
						{
     
      
							style: {
     
      background: "#Ccc", width: "500px" },
							attrs: {
     
      // 普通html属性
								id: 'element',
								class: 'style'
							},	
							on: {
     
      // 给div绑定click事件
								click: this.handleClick
							},
							class: {
     
      // 动态绑定class
								'show': this.show
							},
							// props: { // 组件props
							// 	myprops: 'bar'
							// }
						},
						 '文本内容',
						// 第三个参数 子节点 (需去掉父节点里面的文本内容)
						// [
						// 	createElement(
						// 	  "Button", {
     
     
						// 	    style: { background: "red" },
						// 	    on: {
     
     
						// 	      click: () => {}
						// 	    }
						// 	  }, "查看"
						// 	),
						//]
					)
				},
				data() {
     
     
					return {
     
     
						show:true
					}
				},
				methods: {
     
     
					handleClick() {
     
     
						console.log('clicked !');
					}
				}
			})
			var vm = new Vue({
     
     
				// 管理边界->选取目标 
				el:'#app',
			    // data 存放数据
				data:{
     
     
					name:'测试',
				}			
			})
		</script> 
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/weixin_43983960/article/details/116600440