七个JSX在render函数中的常见应用

共 1479字,需浏览 3分钟

 ·

2020-10-23 18:01


一.JSX简介

  1. const element =

    Hello, world!h1>;

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

Babel 会把 JSX 转译成一个名为 React.createElement() 函数调用。以下两种示例代码完全等效:

  1. const element = (

  2. <h1 className="greeting">

  3. Hello, world!

  4. h1>

  5. );

  1. const element = React.createElement(

  2. 'h1',

  3. {className: 'greeting'},

  4. 'Hello, world!'

  5. );

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

  1. const element = {

  2. type: 'h1',

  3. props: {

  4. className: 'greeting',

  5. children: 'Hello, world!'

  6. }

  7. };

二.模板缺陷

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

  1. :type="1">哈哈

  2. :type="2">哈哈

  3. :type="3">哈哈

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

三.函数式组件

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

  1. export default {

  2. render(h) {

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

  4. },

  5. props: {

  6. type: {

  7. type: Number

  8. }

  9. }

  10. };

复杂的逻辑变得非常简单

四.JSX应用

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

  1. export default {

  2. render(h) {

  3. const tag = "h" + this.type;

  4. return <tag>{this.$slots.default}tag>;

  5. },

  6. props: {

  7. type: {

  8. type: Number

  9. }

  10. }

  11. };

五.render方法定制组件

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

  1. :data="data">


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

  1. :data="data" :render="render">

  2. render(h, name) {

  3. return {name};

  4. }

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

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

六.scope-slot

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

  1. :arr="arr">

  2. v-slot="{item}">

  3. {{item}}


  4. v-for="(item,key) in arr" :key="key">

  5. :item="item">

七.编写可编辑表格

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

最后



如果你觉得这篇内容对你挺有启发,我想邀请你帮我三个小忙:

  1. 点个「在看」,让更多的人也能看到这篇内容(喜欢不点在看,都是耍流氓 -_-)

  2. 欢迎加我微信「qianyu443033099」拉你进技术群,长期交流学习...

  3. 关注公众号「前端下午茶」,持续为你推送精选好文,也可以加我为好友,随时聊骚。


点个在看支持我吧,转发就更好了

浏览 11
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报