render()函数 php,JSX在render函数中的应用

一.JSX简介

const element =

Hello, world!

;

JSX 可以很好地描述 UI 应该呈现出它应有交互的本质形式。JSX 可能会使人联想到模版语言,但它具有 JavaScript 的全部功能。

Babel 会把 JSX 转译成一个名为 React.createElement() 函数调用。

以下两种示例代码完全等效:

const element = (

Hello, world!

);

const element = React.createElement(

'h1',

{className: 'greeting'},

'Hello, world!'

);

React.createElement() 会预先执行一些检查,以帮助你编写无错代码,但实际上它创建了一个这样的对象:

const element = {

type: 'h1',

props: {

className: 'greeting',

children: 'Hello, world!'

}

};

二.模板缺陷

模板的最大特点是扩展难度大,不易扩展。可能会造成逻辑冗余:

哈哈

哈哈

哈哈

Level组件需要对不同的type产生不同的标签

export default {

props: {

type: {

type: Number

}

}

};

三.函数式组件

函数式组件没有模板,只允许提供render函数

export default {

render(h) {

return h("h" + this.type, {}, this.$slots.default);

},

props: {

type: {

type: Number

}

}

};

复杂的逻辑变得非常简单

四.JSX应用

使用jsx会让代码看起来更加简洁、易于读取

export default {

render(h) {

const tag = "h" + this.type;

return {this.$slots.default};

},

props: {

type: {

type: Number

}

}

};

五.render方法定制组件

编写List组件,可以根据用户传入的数据自动循环列表

import List from "./components/List";

export default {

data() {

return {

data: ["苹果", "香蕉", "橘子"]

};

},

components: {

List

}

};

  • {{item}}

export default {

props: {

data: Array,

default: () => []

}

};

通过render方法来定制组件,在父组件中传入render方法

render(h, name) {

return {name};

}

我们需要createElement方法,就会想到可以编写个函数组件,将createElement方法传递出来

{{item}}

import ListItem from "./ListItem";

export default {

components: {

ListItem

},

props: {

render: {

type: Function

},

data: Array,

default: () => []

}

};

ListItem.vue调用最外层的render方法,将createElement和当前项传递出来

export default {

props: {

render: {

type: Function

},

item: {}

},

render(h) {

return this.render(h, this.item);

}

};

六.scope-slot

使用v-slot 将内部值传入即可

{{item}}

七.编写可编辑表格

基于iview使用jsx扩展成可编辑的表格

import Vue from 'vue';

export default {

methods:{

render(h,{column,index,row}){

let value = row[column.key];

return

this.changeIndex(e,index)} >

{this.index === index ?

{

this.handleChange(value,column,row)

}} onOn-enter={()=>this.enter(row,index)}/>:

{value}

}

},

enter(row,index){

this.data.splice(index,1,row);

this.index = -1;

},

handleChange(value,column,row){

row[column['key']]= value;

},

changeIndex(e,index){

this.index = index;

this.$nextTick(()=>{

e.currentTarget.getElementsByTagName("input")[0].focus();

})

}

},

data() {

return {

index:-1,

columns: [

{

title: 'Name',

key: 'name',

render:this.render

},

{

title: 'Age',

key: 'age',

},

{

title: 'Address',

key: 'address',

},

],

data: [

{

name: 'John Brown',

age: 18,

address: 'New York No. 1 Lake Park',

date: '2016-10-03',

},

{

name: 'Jim Green',

age: 24,

address: 'London No. 1 Lake Park',

date: '2016-10-01',

},

{

name: 'Joe Black',

age: 30,

address: 'Sydney No. 1 Lake Park',

date: '2016-10-02',

},

{

name: 'Jon Snow',

age: 26,

address: 'Ottawa No. 2 Lake Park',

date: '2016-10-04',

},

],

};

},

};

想要了解更多关于JSX的内容,欢迎关注【前端优选】

bVbxfFu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 的 render 函数是 Vue 组件渲染的核心,通过 render 函数可以实现更加灵活的组件编写方式。下面是关于 Vue render 函数的详细介绍: 1. 概念定义: Vue 的 render 函数是一个纯 JavaScript 函数,它接收一个 createElement 函数作为参数,用于生成虚拟 DOM,最终将组件渲染成 HTML。在 Vue 组件,可以使用 render 函数来代替 template,这样可以更加灵活地渲染组件。 2. createElement 函数: createElement 函数是 Vue 的一个工厂函数,用于快速创建虚拟 DOM 元素。createElement 函数接收三个参数,第一个参数是标签名或组件,第二个参数是属性对象,第三个参数是子节点。 使用 createElement 函数可以快速创建虚拟 DOM 元素,例如: ```javascript // 创建一个 div 元素 createElement('div', { class: 'wrapper' }, [ createElement('h1', {}, 'Hello Vue') ]) ``` 3. Vue 组件的 render 函数: Vue 组件的 render 函数接收一个 createElement 函数作为参数,通过该函数创建虚拟 DOM 元素。在 render 函数,通过编写 JavaScript 代码来生成 DOM 元素,可以使用条件判断、循环语句等,从而实现更加灵活的组件渲染。 例如,下面是一个简单的 render 函数: ```javascript render (createElement) { return createElement('div', { class: 'wrapper' }, [ createElement('h1', {}, 'Hello Vue') ]) } ``` 4. render 函数与 template 的对比: 相对于 template,render 函数的优点在于:可以使用 JavaScript 代码生成 DOM 元素,可以进行条件判断、循环语句等;可以实现更加灵活的组件开发;可以更好地控制组件的渲染流程。 相对于 template,render 函数的缺点在于:需要熟悉 JavaScript 语法和 createElement 函数;在实现复杂组件时,需要编写更多的代码。 5. render 函数JSXJSX 是 Facebook 出品的一种语法扩展,可以在 JavaScript 编写类似 HTML 的语言。与 render 函数类似,JSX 也是将组件编写成 JavaScript 代码的方式。 Vue 也支持 JSX 语法,Vue 的 JSX 实现是通过 Babel 插件实现的。使用 JSX 可以更加直观地编写组件,但需要熟悉 JSX 语法和相关工具的使用。 6. 总结: render 函数是 Vue 组件的核心,它通过 createElement 函数创建虚拟 DOM 元素,最终将组件渲染成 HTML。相对于 template,render 函数可以实现更加灵活的组件开发,但需要熟悉 JavaScript 语法和 createElement 函数。同时,Vue 也支持 JSX 语法,可以更加直观地编写组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值