vue 20道精選面試題

一、說下Vue數據雙向綁定的原理php

能夠參考https://www.cnblogs.com/wangjiachen666/p/9883916.htmlhtml

也就是說:輸入框內容發生變化時,data中的數據同步發生變化。即view = > model的變化vue

     data中的數據變化時,文本節點的內容同步發生變化。即model = > view的變化java

二、說說Vuex的做用以及應用場景webpack

項目數據狀態的集中管理,複雜組件(如兄弟組件、遠房親戚組件)的數據通訊問題。ios

三、說說Vue組件的數據通訊方式web

父傳子----》props  子傳父----》$emitajax

父組件向子組件傳值:propsvue-router

// section父組件
<template>
    <div class="section">
        <funqin-components :articleList="articleList"></funqin-components>
    </div>
</template>

<script>
import funqinComponents from './test/article.vue'
export default {
    name: 'HelloWorld',
    components: { funqinComponents },
    data() {
        return {
            articleList: ['紅樓夢', '西遊記', '三國演義']
        }
    }
}
</script>

// 子組件 article.vue
<template>
    <div>
        <span v-for="(item, index) in articleList" :key="index">{{item}}</span>
    </div>
</template>
<script>
export default {
    props: ['articleList']
}
</script>

 總結: props 只能夠從上一級組件傳遞到下一級組件(父子組件),即所謂的單向數據流。並且 props 只讀,不可被修改,全部修改都會失效並警告。vuex

子組件向父組件傳值:$emit

// section父組件
<template>
    <div class="section">
        <funqin-components :articleList="articleList" @e-world="getData"></funqin-components>
    </div>
</template>

<script>
import funqinComponents from './test/article.vue'
export default {
    name: 'HelloWorld',
    components: { funqinComponents },
    data() {
        return {
            attr2:'',
            articleList: ['紅樓夢', '西遊記', '三國演義']
        }
    },
    methods:{
        getData(attr2) {
            this.attr2=attr2;
        }
    }
}
</script>

// 子組件 article.vue
<template>
    <div>
        <span v-for="(item, index) in articleList" :key="index">{{item}}</span>
        {{attr2}}
        <button @click="send">將子組件的數據傳遞給父組件</button>
    </div>
</template>
<script>
export default {
    data() {
        return {
            attr2: "我是子組件的數據"
        }
    },
    props: ['articleList'],
    methods:{
        send() {
            //調用emit方法,觸發了一個自定義的事件e-world,發送數據
            this.$emit("e-world", this.attr2);
        }
    }
}
</script>

總結:$emit綁定一個自定義的事件,當這個語句被執行時,就會將參數傳給父組件,父組件經過v-on也就是@監聽並接收,

同時父組件的data對象裏,也要定義這個變量來接收這個值。

既然寫到這裏,再說一下:兄弟組件的傳遞(建立一個空的vue對象來接收)

<div id="app">
        <component1></component1>
        <component2></component2>
    </div>
    <template id="t1">
        <div>
            我是component1,{{attr2}}

        </div>
    </template>

    <template id="t2">
        <div>
            我是component2
            <button @click="send">將component2的數據傳遞給component1</button>
        </div>
    </template>
    <script>
        var event = new Vue({}); var vm = new Vue({
            el: "#app",
            components: {
                "component1": {
                    template: "#t1",
                    data() {
                        return {
                            attr1: "我是component1的數據",
                            attr2: ""
                        }
                    },
                    mounted() {
                        //接收
                        event.$on("e-world", attr2 => {
                            this.attr2 = attr2;
                        });
                    },
                },
                "component2": {
                    template: "#t2",
                    data() {
                        return {
                            attr2: "我是component2的數據"
                        }
                    },
                    methods: {
                        send() {
                            //發送數據
                            event.$emit("e-world", this.attr2);
                        }
                    },
                }
            }
        });
    </script>

四、Vue的源碼有看過嗎?說說vuex工做原理

詳細請參考:https://www.cnblogs.com/changk/p/8657465.html(轉載)

五、什麼是虛擬dom,爲何說虛擬 dom會提升性能,解釋一下它的工做原理

虛擬dom就是一個JavaScript對象,經過這個JavaScript對象來描述真是的dom。真是的dom操做,都會對某塊元素總體重新渲染。採用虛擬dom,當數據變化時,只要局部刷新對應變化的位置就能夠了。

六、請你詳細介紹一些 package.json 裏面的配置

 詳細請參考:https://blog.csdn.net/weixin_42420703/article/details/81870815(轉載)

七、爲何說Vue是一套漸進式框架

 每一個框架都不可避免會有本身的一些特色,從而會對使用者有必定的要求,這些要求就是主張,主張有強有弱,它的強勢程度會影響在業務開發中的使用方式。 使用vue,你 能夠在原有

每一個框架都不可避免會有本身的一些特色,從而會對使用者 有必定的要求,這些要求就是主張,主張有強有弱,它的強勢程度會影響在業務開發中的使用方式。
使用vue,你能夠在原有大系統的上面,把一兩個組件改用它實現,當jQuery用;也能夠整個用它全家桶開發,當Angular用;
還能夠用它的視圖,搭配你本身設計的整個下層用。你能夠在底層數據邏輯的地方用OO和設計模式的那套理念。
也能夠函數式,均可以。
它只是個輕量視圖而已,只作了本身該作的事,沒有作不應作的事,僅此而已
你沒必要一開始就用Vue全部的全家桶,根據場景,官方提供了方便的框架供你使用。

 八、vue-cli提供的幾種腳手架模板有哪些,區別是什麼

webpack和webpack-simple,最大的區別是webpack-simple沒有路由vue-router配置

九、計算屬性的緩存和方法調用的區別

 (1)咱們能夠將同一函數定義爲一個方法或是一個計算屬性。兩種方式的最終結果確實是徹底相同的。不一樣的是計算屬性是基於它們的依賴進行緩存的。只在相關依賴發生改變時它們纔會從新求值。相比之下,每當觸發從新渲染時,調用方法將總會再次執行函數。

(2)使用計算屬性仍是methods取決因而否須要緩存,當遍歷大數組和作大量計算時,應當使用計算屬性,除非你不但願獲得緩存。
咱們爲何須要緩存?假設咱們有一個性能開銷比較大的計算屬性 A,它須要遍歷一個巨大的數組並作大量的計算。而後咱們可能有其餘的計算屬性依賴於 A 。若是沒有緩存,咱們將不可避免的屢次執行 A 的 getter!若是你不但願有緩存,請用方法來替代。
(3)計算屬性是根據依賴自動執行的,methods須要事件調用。

十、axios、fetch與ajax有什麼區別

詳細請參考:https://www.cnblogs.com/zhang134you/p/10636061.html(轉載)

十一、vue中央事件總線的使用

詳細請參考:https://blog.csdn.net/wy01272454/article/details/77756079(轉載)

十二、你作過的Vue項目有哪些,用到了哪些核心知識點

1三、實現MVVM的思路分析

詳細請參考:https://www.cnblogs.com/aaronjs/p/3614049.html(轉載)

1四、批量異步更新策略及 nextTick 原理

詳細請參考:https://blog.csdn.net/sinat_17775997/article/details/83280345(轉載)

1五、說說Vue開發命令 npm run dev 輸入後的執行過程

詳細請參考:https://www.cnblogs.com/zeroes/p/vue-run-dev.html(轉載)

1六、vue-cli中經常使用到的加載器有哪些

詳細請參考:https://www.jianshu.com/p/ac8e685577cd(轉載)

1七、Vue中如何利用 keep-alive 標籤實現某個組件緩存功能

詳細請參考:https://www.php.cn/js-tutorial-398645.html(轉載)

1八、vue-router如何響應 路由參數 的變化

詳細請參考:https://www.cnblogs.com/mengfangui/p/9154253.html(轉載)

1九、Vue 組件中 data 爲何必須是函數

Object是引用數據類型,若是不用function 返回,每一個組件的data 都是內存的同一個地址,一個數據改變了其餘也改變了,

javascipt只有函數構成做用域(注意理解做用域,只有函數的{}構成做用域,對象的{}以及 if(){}都不構成做用域),data是一個函數時,每一個組件實例都有本身的做用域,每一個實例相互獨立,不會相互影響。

下面以例子來講明一下:

<div id="app">
    <simple-counter></simple-counter>
    <simple-counter></simple-counter>
    <simple-counter></simple-counter>
</div>
var data = { counter: 0 };
    Vue.component('simple-counter',{
        template:'<button v-on:click="counter += 1">{{ counter}}</button>',
    // 技術上 data 的確是一個函數了,所以 Vue 不會警告,
    // 可是咱們返回給每一個組件的實例卻引用了同一個 data 對象
    data: function () {
        return {
            data
        }
    }
})
new Vue({
    el:'#app'
});

由於這三組從新共享了data,因此值都是相同的,咱們能夠經過給每一個組件返回全新的data對象來解決這個問題

data: function () {
    return {
      counter: 0
    }
}

如今每一個 counter 都有它本身內部的狀態了。

相關文章
相關標籤/搜索