zoukankan      html  css  js  c++  java
  • VUE REACT

    • vue生命周期(包含子孙组件的情况)

      beforeCreate     (创建前)
      created                此时进行数据请求---- 初始化数据    此时不能操作dom,只能通过异步nexttick 来操作
      beforeMount      (载入前) 挂载开始之前被调用 挂载Dom
      mounted.          (载入后) dom渲染完成
      beforeUpdate     (更新前) 更新
      updated               (更新后)
      beforeDestory (销毁前)
      detoryed           (销毁后)

       
    •  VUE 的原理 : 数据双向绑定原理

             obj.defineProperty 监听 对象的 set 和 get 方法 ,来监听对象属性值改变


    • Vuex  原理 和 使用场景
           Vuex是通过全局注入store对象,来实现组件间的状态共享。在大型复杂的项目中(多级组件嵌套),需要实现一个组件更改某个数据,多个组件自动获取更改后的数据进行业务逻辑处理,这时候使用vuex比较合适。假如只是多个组件间传递数据,使用vuex未免有点大材小用,其实只用使用组件间常用的通信方法即可
    •  
    •  


    • Vue组件简单常用的通信方式有以下几种:
      1、父子通信:  
      父向子传值,通过props;子向父传值通过events ($emit);   ----和 v-model 类似,v-model 不需要写子组件回传事件
    • 1,父组件调用子组件方法和属性

    a、父组件文件,声明ref属性:

    <v-header ref="header"></v-header>

    b、父组件函数中,用this.$refs调子组件的数据或方法:如:

    1. this.$refs.header.属性名
       
    • 2,子组件调用父组件属性和方法

      1. this.$parent.属性名
      2.  this.$parent.方法名     

      2、兄弟通信:bus   中央事件总线
    • 上面两种方式处理的都是父子组件之间的数据传递,而如果两个组件不是父子关系呢?这种情况下可以使用中央事件总线的方式。新建一个Vue事件bus对象,然后通过  bus.$emit   触发事件,bus.$on  监听触发的事件。
    Vue.component('brother1',{
        data(){
          return {
            mymessage:'hello brother1'
          }
        },
        template:`
          <div>
            <p>this is brother1 compoent!</p>
            <input type="text" v-model="mymessage" @input="passData(mymessage)">
          </div>
        `,
        methods:{
          passData(val){
            //触发全局事件globalEvent
            bus.$emit('globalEvent',val)
          }
        }
      })
      Vue.component('brother2',{
        template:`
          <div>
            <p>this is brother2 compoent!</p>
            <p>brother1传递过来的数据:{{brothermessage}}</p>
          </div>
        `,
        data(){
          return {
            mymessage:'hello brother2',
            brothermessage:''
          }
        },
        mounted(){
          //绑定全局事件globalEvent
          bus.$on('globalEvent',(val)=>{
            this.brothermessage=val;
          })
        }
      })
      //中央事件总线
      var bus=new Vue();
      var app=new Vue({
        el:'#app',
        template:`
          <div>
            <brother1></brother1>
            <brother2></brother2>
          </div>
        `
      })

    • vue-router  大概原理
      vue-router 包括三个组成
      vueRouter :       路由器类,根据请求在视图中动态渲染选中的组件
      router-link :      路由链接组件,
      router-view :路由视图组件,负责动态渲染路由选中的组件
      前端路由直接找到与地址匹配的一个组件或者对象然后进行渲染
      通过 hash 和 history 两种方式实现

    1.   Hash: 通过改变hash值
    2.  History: 利用history对象新特性


    • axios怎么使用拦截器,是不是知道支持 node 和浏览器端发送请求,用的什么发送的请求

    • vue-cli如何新增自定义指令
      a. 创建局部指令
      var app = new Vue({
         el: '#app',
         data: {  },
        
      // 创建指令(可以多个)
      directives: {
      /*指令名称*/
          dir1: {
            inserted(el) {
      /*指令中第一个参数是当前使用指令的DOM*/
            console.log(el);
            console.log(arguments);
      // 对DOM进行操作
          el.style.width = '200px';
          el.style.height = '200px';
          el.style.background = '#000';
      
         }
        }
       }
      })
    • b. 全局指令
    • Vue.directive('dir2', {
        inserted(el) {
           console.log(el);
        }
      })
      
      //指令的使用
      
      <div id="app">
      <div v-dir1></div>
      <div v-dir2></div>
      </div>
    • 原型链 和 作用域链,主要表现在寄生组合继承和extends继承的区别和new做了什么。

    作用域的特点 ::先在自己的变量范围中查找,如果找不到,就会沿着作用域往上找。总结有以下两点!
    1、函数限定变量作用域,就是说,在JavaScript中,在函数里面定义的变量,可以在函数里面被访问,但是在函数外无法访问
    2、在JavaScript中使用变量,JavaScript解释器首先在当前作用域中搜索是否有该变量的定义,如果有,就是用这个变量;如 果没有就到父域中寻找该变量. 由于变量提升,因此在实际开发的时候,推荐将变量都写在开始的地方,也就是在函数的开头将变量就定义好.
    原型链:
    它也是一种查找机制,实例首先在自己的私有属性种进行查找,如果不是私有属性,基于__proto__向所属类的原型上进行查找,如果再找不到,则继续基于__proto__向上查找,一直找到Object.prototype为止。例如obj.hasOwnproperty这个属性就是找到Object.prototype才找到的
    1、所有的函数都继承自 Function.prototype,Function,Object 是函数,所以继承自 Function.prototype
    2、所有的对象都直接或间接继承自 Object.prototype,Function.prototype.proto === Object.prototype函数也是对象,所以函数最终继承自Object.prototype
    3、Object.prototype 继承自 null,万剑归宗


    4、vue一些高级特性(比如 自定义 v-model、插槽、mixins、keep-alive、动态组件、异步组件,$nextTick
                自定义 v-model: 负责监听用户的输入事件,从而更新数据,
    [参考链接](https://www.jianshu.com/p/20e485cb65d9)

    插槽: 自组件用 给父组件做占位符,父组件用 分发内容到自组件占位中 (参考 https://www.cnblogs.com/mandy-dyf/p/11528505.html)
    mixins: 是
    keep-alive: keep-alive是Vue内置的一个组件,可以使被包含的组件保留状态,避免重新渲染,配合include使用,使得 keep-alive 中的组件缓存
       动态组件:
    让多个组件使用同一个挂载点,并动态切换,这就是动态组件,本文将详细介绍Vue动态组件
    通过使用保留的 元素,动态地绑定到它的 is 特性,可以实现动态组件
    <component   :is="currentView"></component>

    我们之前曾经在一个多标签的界面中使用 is attribute 来切换不同的组件:

    <component    v-bind:is="currentTabComponent"></component>

    当在这些组件之间切换的时候,你有时会想保持这些组件的状态,以避免反复重渲染导致的性能问题。


    • <!-- 失活的组件将会被缓存!-->
      <keep-alive>
      <component v-bind:is="currentTabComponent"></component>
      </keep-alive>


        异步组件:
    在大型应用中,我们可能需要将应用分割成小一些的代码块,并且只在需要的时候才从服务器加载一个模块。为了简化,Vue 允许你以一个工厂函数的方式定义你的组件,这个工厂函数会异步解析你的组件定义。Vue 只有在这个组件需要被渲染的时候才会触发该工厂函数,且会把结果缓存起来供未来重渲染
    $nextTick:
    使用场景: 在Vue生命周期的 created() 钩子函数进行的DOM操作一定要放在Vue.nextTick() 的回调函数中
           在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的js代码放进Vue.nextTick()的回调函数中

          与之对应的就是mounted()钩子函数,因为该钩子函数执行时所有的DOM挂载和渲染都已完成,此时在该钩子函数中进行任何DOM操作都不会有问题



    v-if,v-show 区别:

    v-if 按照条件是否渲染 ,一次性

    v-show 是 display :block or none 



               vue 常用的修饰符 
    一、v-model修饰符
    .lazy: 输入框改变,这个数据就会改变,lazy这个修饰符会在光标离开input框才会更新数据:
    .trim:输入框过滤首尾的空格:
    .number:先输入数字就会限制输入只能是数字,先字符串就相当于没有加number,注意,不是输入框不能输入字符串,是这个数据是数字:

    二、事件修饰符
    .stop :  阻止事件冒泡,相当于调用了event.stopPropagation()方法:
    .prevent 阻止默认行为,相当于调用了event.preventDefault()方法,比如表单的提交、a标签的跳转就是默认事件:
    .self 只有元素本身触发时才触发方法,就是只有点击元素本身才会触发。比如一个div里面有个按钮,div和按钮都有事件,我们点击按钮,div绑定的方法也会触发,如果div的click加上self,只有点击到div的时候才会触发,变相的算是阻止冒泡:

    .once : 事件只能用一次,无论点击几次,执行一次之后都不会再执行

    .capture: 事件的完整机制是捕获-目标-冒泡,事件触发是目标往外冒泡

    .sync对prop进行双向绑定

    .keyCode 监听按键的指令,具体可以查看vue的键码对应表

    .prevent:提交时间不再重载页面,
    .stop:阻止单击时间冒泡
    .capture:事件监听,事件发生时候调用


    • 什么是 vue 的计算属性
      在模版中放入太多的逻辑会让模版过重且难以维护,在需要对数据进行复杂处理且可能 多次复用 情况下,尽量采取计算属性的方式,
      好处:1,使得数据处理结构清晰,
      2,依赖于数据,数据更新,处理结果自动更新,
      3 ,计算属性内部 this 指向 vm 实例,
      11,怎么定义 vue-router 的动态路由? 怎么获取传过来的值
      在 router 目录下的 index.js 文件中,对 path 属性加上 /:id ,
      使用 router 对象的 params.id 获取
      12,css只在当前组件起作用
      【答】 :在style标签中写入scoped 即可,例如:
  • 相关阅读:
    Java 9 揭秘(14. HTTP/2 Client API)
    Java 9 揭秘(13. Collection API 更新)
    Java 9 揭秘(12. Process API 更新)
    JAVA数组与List相互转换
    linux下开启oracle服务和开启监听
    Centos7安装Redis
    Hibernate乐观锁无法Catch到org.hibernate.StaleObjectStateException
    Eclipse远程调试Tomcat
    Centos7 使用Docker搭建Oracle测试环境
    Maven安装Oracle驱动包到本地仓库
  • 原文地址:https://www.cnblogs.com/dh2608/p/15426820.html
Copyright © 2011-2022 走看看