ViewUi的render

简介: ViewUi的render

需要:我们想要在table组件里面自定义一些内容,

比如select / switch 等等,就需要用到render这个函数

先看一下官网提供的例子:

      columns1: [
        {
          title: "Name",
          key: "name",
        },
        {
          title: "Age",
          key: "age",
        },
        {
          title: "Address",
          key: "address",

          render: (h, params) => {
            console.log(params);
            return h("i-switch", {
              props: {
                type: "radio",
                value: params.row.checked,
              },

              nativeOn: {
                click: () => {
                  this.initData();
                  console.log(123);
                },
              },
            });
          },
        },
      ],

复制代码
在表头里面直接render出来结构,写法比较奇葩,参考vue的render

https://cn.vuejs.org/v2/guide/render-function.html

效果图如下:

就可以看到我们自定义的组件switch了,

注意如果绑定的是一些第三方组件(ivewUI),

绑定事件需要 用nativeOn

两个参数:h类似于creatDom,params就是这一列的数据

包括column ,index,raw

当我们觉得恶心(render写法)且大功告成的时候,

发现render写法更恶心的地方!

视图无法更新

举例:我们开关的按钮需要调接口,然后不论请求成功或失败,

都需要再去获取一次最新的数据,来更新我们的视图。

用render的写法就会导致,数据源变了,视图却无法更新的问题。

参考了一些文档,发现可以用slot来替代render,解决我们问题的同时,

也让我们的写法更优雅了,写法如下:

    <i-table :columns="columns1" :data="data1">
      <!-- switch slot -->
      <template slot-scope="{ row, index }" slot="switchSlot">
        <i-switch v-model="row.checked" @on-change="initData"></i-switch>
      </template>
    </i-table>

复制代码
注意slot需要声明在table里面,不然报错

然后,再定义表头的columns1来引用slot 即可完成。

      columns1: [
        {
          title: "Name",
          key: "name",
        },
        {
          title: "Age",
          key: "age",
        },
        {
          title: "Address",
          key: "address",
          slot: "switchSlot",
          // render: (h, params) => {
          //   console.log(params);
          //   return h("i-switch", {
          //     props: {
          //       type: "radio",
          //       value: params.row.checked,
          //     },

          //     nativeOn: {
          //       click: () => {
          //         this.initData();
          //         console.log(123);
          //       },
          //     },
          //   });
          // },
        },
      ],

复制代码
代码注释了render的写法

相关参考文档:https://run.iviewui.com/8NNVisgQ

最后不得不说,iview真的坑,render写法真的恶心。。

作者: Bill 本文地址: http://biaoblog.cn/info?id=1625625191946

版权声明: 本文为原创文章,版权归 biaoblog 个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!

相关文章
|
1月前
|
前端开发
react-router中的render、children、component
react-router中的render、children、component
68 1
|
1月前
|
前端开发
React中render Props模式
React中render Props模式
React中render Props模式
|
1月前
|
JavaScript 前端开发 API
Vue中的render函数和template渲染原理有什么不同?
Vue中的render函数和template渲染原理有什么不同?
55 0
|
1月前
|
前端开发 JavaScript
react的render什么时候渲染?
react的render什么时候渲染?
24 0
|
11月前
|
JavaScript
vue: render 封装el-pagination
vue: render 封装el-pagination
81 0
|
7月前
|
前端开发 JavaScript 容器
react render的作用
react render的作用
59 0
|
9月前
|
JavaScript 前端开发 安全
vue中的 render 和 h() 详解
当使用Vue.js进行前端开发时,理解和掌握&quot;render&quot;函数和&quot;h()&quot;函数是非常重要的,因为它们是Vue组件的核心构建和渲染部分 render 和 h()是在Vue.js中常用的两个概念,它们通常用于创建和渲染Vue组件。
126 0
|
9月前
|
JavaScript
vue render
vue render
37 0
|
11月前
|
JavaScript
render
render
122 0
|
前端开发 JavaScript
Render Props 技术:从入门到深入理解
在 Web 前端开发中,有许多强大的技术可以帮助我们构建灵活且可重用的组件。其中一项技术就是 Render Props(渲染属性),它是一种通过组件间传递函数来共享代码的模式。本文将带你深入了解 Render Props 技术,包括它的概念、使用方式以及如何使用 JavaScript 实现它。
131 0
Render Props 技术:从入门到深入理解