美文网首页
UI组件库-Tab组件(jsx)

UI组件库-Tab组件(jsx)

作者: 前端巴士 | 来源:发表于2020-07-25 17:47 被阅读0次

    其实一直想绕过jsx,原计划是先在react里面带大家用上jsx,vue里面就不涉及了。昨天经过一番折腾,实在是在vue组件的<template>里面不能很满意的实现想要的效果,其实我对自己和大家的要求不高,只是说咱们的代码在完成其功能的前题下,要容易阅读,易于理解。

    在实现Tab组件的时候,我觉得自己不能达到这个要求,在参考了各种源码后,终于还是决定在项目中使用jsx。

    jsx的视频已经发给大家(也可以在react合集里面找到),虽然是在react的环境下但是区别不大,大家先看一下,掌握基本用法,后面用的多了,就没有障碍了。

    一、vue 项目引入 jsx 支持

    这个官方文档有详细的说明,可以直接查阅,下面简单记录下

    // 安装依赖npm install @vue/babel-preset-jsx @vue/babel-helper-vue-jsx-merge-props --save-dev// 配置 babel,如果没有就新建 .babelrc 文件{  "presets": ["@vue/babel-preset-jsx"]}
    

    二、vue 组件的写法的变化

    一个 vue 组件,其中要求 <template> 标签和 render() 方法二选一,在使用 render() 的时候,其实文件名都可以改为 .js 形如下面的样子

    // tabs.jsexport default {  data() {    return {}  },  mounted() {},  methods: {},  render(h) {}  ...}
    

    但是,我们的 Tab 组件还是有一些样式要考虑的,上面这样的方式就不方便了,改为如下的形式:

    // tabs.vue<script>export default {  data() {    return {}  },  mounted() {},  methods: {},  render(h) {}  ...}</script><style lang="sass" scoped></style>
    

    这样我们就兼顾了 render() 和我们的样式

    三、用 jsx 的方式实现我们之前的 tab组件结构

    UI组件库-Tab组件(jsx)

    如上图,这是我们改造前组件的 <template> 中的结构,现在修改成 jsx 的方式,如下图

    UI组件库-Tab组件(jsx)

    具体的实现过程,这里就不重复说了,分享的时候已经很仔细的带大家做了,这里要提醒大家注意的是 slots,children 还有 jsx 的各种写法。

    四、组件用法

    组件完成后,我们就可以在需要的地方很简便的使用了,因为是参考 Element 的 api,所以大家用起来也会比较自然

    UI组件库-Tab组件(jsx)

    和 Element 的 tab 组件一样,一个 v-model 指定被激活的 tab,<Tab> 组件的 label 属性设置 tab 标签上的文字,<Tab> 组件中的内容,就是 tab 标签页对应的主体内容,<Tab> 的 name 属性用于区分不同的 tab。

    上图中的按钮是我做的一个实验,为了证明按钮的事件可以被调用。

    <Tab> 组件的内容没有贴出来,很简单,就是一个 li,按 Bulma 的要求写就行。

    END

    相关文章

      网友评论

          本文标题:UI组件库-Tab组件(jsx)

          本文链接:https://www.haomeiwen.com/subject/hismlktx.html