1. 监听子组件的生命周期
例如有父组件Parent和子组件Child,如果父组件监听到子组件挂载mounted就做一些逻辑处理,常规写法可能如下:

// Parent.vue
<Child @mounted="doSth" /> //Child.vue
mounted(){
  this.$emit('mounted');
}

这里提供一种简便的方法,子组件无需做任何处理,只需要在父组件引用子组件时使用@hook方法来监听即可,代码如下:

// Parent.vue
<Child @hook:mounted="doSth" /> methods:{
  doSth(){
    //some codes here
  }
}

当然这里不仅仅是可以监听到mounted,其他生命周期的事件都可以监听到,例如created updated等等。

2.render函数
  1.render函数的作用:
  Vue推荐在绝大数情况下实用模板创建你的HTML,然而当某些特殊场景使用template创建HTML会显得代码繁琐冗长,如根据一个为`level`的prop动态创建标题的 组件,你可能想到这样写:

//Parent.vue
<Child :level="1" >hello world</Child>
//Child.vue
<template>
  <div>
    <h1 v-if="level===1">
      <slot></slot>
    </h1>
    <h2 v-if="level===2">
      <slot></slot>
    </h2>
    <h3 v-if="level===3">
      <slot></slot>
    </h3>
    <h4 v-if="level===4">
      <slot></slot>
    </h4>
    <h5 v-if="level===5">
      <slot></slot>
    </h5>
    <h6 v-if="level===6">
      <slot></slot>
    </h6>
  </div>
</template>
<script>
  export default{
    props:["level"]
  }
</script>

显然template用在这里不合适,我们来看一下用render函数重写这个组件

//Parent.vue
<template>
  <div>
    <Child :level="1">Hello World</Child>
  </div>
</template>
<script>
  export default {
    component:{
      child:{
        render(creatElement){
          return creatElement(
            'h'+this.level, //标签名称
            {
              style:{
                color:'#f60'
              }
            }, //标签中的属性
            this.$slots.default //子节点数组
          )
        },
        props:{
          level:{
            required:true,
            type:Number
          }
        }
      }
    }
  }
</script>

  2.render函数的返回值:Vnode(即虚拟节点)
  3.render函数的参数:createElement
   createElement本身也是一个函数,且有三个参数:
   * 要创建的节点: (必填) { string | object | function },可以是要创建的HTML标签名称,也可以是组件对象,也可以是解析上述任何一种的一个异步函数
   * 标签中的属性: (可选) { object }
   * 子虚拟节点: (可选) { string | array } 由createElement()构建而成,可以使用字符串来生成“文本虚拟节点”

3.当传输数据较多时,无需一一绑定props的小技巧:$attrs

vm.$attrs  简单来说$attrs保存的是父组件中未绑定props的属性值



//父组件
<template>
  <div>
    <child1 :aa="aa" :bb="bb" :cc="cc"></child1>
  </div>
</template>
<script>
import Child1 from './component/child1.vue';
export default {
name: 'demo',
data() {
return {
aa: 'attrs-aa',
bb: 'attrs-bb',
cc: 'attrs-cc',
};
},
components: {
Child1
},
methods: {
reduce() {
this.dd--;
}
}
};
</script>
//子组件1
<template>
<div>
    <p>child1获取的attrs:{{$atrrs}}</p>
    <child2 :msg="msg" v-bind="$attrs"></child2>
  </div>
</template>
<script>
import child2 from './child2.vue';
export default {
name: 'demo1',
data() {
return {
    msg:"msg"
  };
},
components: {
child2
},
methods: { }
</script>
//子组件2
<template>
<div>
    <p>child2获取的attrs:{{$atrrs}}</p>
  </div>
</template>
<script>
export default {
name: 'demo2',
data() {
return {};
}
</script>

Vue开发中的常用技巧(持续更新)的更多相关文章

  1. 前端开发中的一些tips(持续更新)

    本文记录分享一些在日常开发中经常遇到的一些问题的解决方案及常用小技巧,如有错误之处还请批评指正.CSS相关:1.如何修改chrome记住密码后自动填充表单的黄色背景? input:-webkit-au ...

  2. spring boot项目开发中遇到问题,持续更新

    1.JPA中EntityManager不能执行建表语句,提示要加事务Error:javax.persistence.TransactionRequiredException: Executing an ...

  3. 【Go】开发中遇到的坑——持续更新

    关于CGo多语言编译 问题出现在将openCV封装到go语言的时候.在编译时需要设置 CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o xxx mai ...

  4. Intellij 常用技巧-持续更新

    1.快速输入 System.out.println(); sout [TAB] 2.删除Module ctrl+alt+shift+s 调出  Project Structure ,也可点击菜单Fil ...

  5. fastadmin 后台管理框架使用技巧(持续更新中)

    fastadmin 后台管理框架使用技巧(持续更新中) FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架,具体介绍,请查看文档,文档地址为:https://doc. ...

  6. ios开发中的小技巧

    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...

  7. PLSQL Developer 11 使用技巧(持续更新)

    PLSQL Developer 11 使用技巧 (持续更新) 目录(?)[-] 首先是我的颜色配置 常用快捷键 提升PLSQL编程效率 按空格自动替换 关闭Window窗口 PLSQL 实用技巧 TI ...

  8. iOS开发中调试小技巧

    对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不同语言.不同IDE.不同平台的 ...

  9. iOS - 开发中调试小技巧

    对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不同语言.不同IDE.不同平台的 ...

随机推荐

  1. Java中的equalsIgnoreCase()

    在工作中偶然机会看到了equalsIgnoreCase()这个方法,相信大家和我一样equals()是再熟悉不过的了,但是对于equalsIgnoreCase()有点眼生(大神勿喷),所以写了这篇博客 ...

  2. @ControllerAdvice自定义异常统一处理

    正常来说一个系统肯定有很多业务异常.而这些业务异常的信息如何返回给前台呈现给用户.比如用户的某些操作不被允许,需要给用户提示. Spring 提供了@ControllerAdvice这个注解,这个注解 ...

  3. Java入门 - 语言基础 - 05.基本数据类型

    原文地址:http://www.work100.net/training/java-basic-datatype.html 更多教程:光束云 - 免费课程 基本数据类型 序号 文内章节 视频 1 概述 ...

  4. Ubuntu16手动安装OpenStack

    记录大佬的博客全文转载于https://www.voidking.com/dev-ubuntu16-manual-openstack-env/ 前言 <Ubuntu16安装OpenStack&g ...

  5. Python中类属性和实例属性的区别

    在Python中经常会混淆类属性和实例属性的概念,今天专门记录一下个人理解以免日后忘记. 看下面的例子: class Tencent(): i = 10 # 此处i为类属性 def __init__( ...

  6. Jmeter使用—使用 HTTP代理服务器抓取接口

    这里说一下怎么使用jmeter的HTTP代理服务器来抓取接口. 首先,打开jmeter,进入主页面,然后在对工作台(Jmeter版本4.0)点击右键->添加->非测试元件->HTTP ...

  7. 【Java并发基础】利用面向对象的思想写好并发程序

    前言 下面简单总结学习Java并发的笔记,关于如何利用面向对象思想写好并发程序的建议.面向对象的思想和并发编程属于两个领域,但是在Java中这两个领域却可以融合到一起.在Java语言中,面向对象编程的 ...

  8. 理解和运用Java中的Lambda

    前提 回想一下,JDK8是2014年发布正式版的,到现在为(2020-02-08)止已经过去了5年多.JDK8引入的两个比较强大的新特性是Lambda表达式(下文的Lambda特指JDK提供的Lamb ...

  9. 【动手学pytorch】线性回归

    代码及解释 错题整理

  10. P2571 [SCOI2010]传送带——hyl天梦

    P2571 [SCOI2010]传送带题解----天梦 如写的不好,请多见谅. 对于这道题,我首先想说,确实困惑了我好久,看网上的各种题解,却都不尽人意,思路早已明白,却不会操作.最后想想,还是觉得自 ...