引用自:https://segmentfault.com/a/1190000021043760
通過vue-cli創建vue項目時,默認的渲染主頁是public/index.html文件,它里有一個id=“app”的div元素。而在主組件src/App.vue的template里也有一個id=“app”的根元素,為何在渲染時兩者不會沖突?
原因如下:
作為入口文件的src/main.js,創建了應用的vue根實例。
根實例的el選項或者實例方法$mount()的參數,提供了一個已經存在的DOM元素作為掛載Vue實例的掛載目標。此處掛載元素是index.html中的id為’#app’的div元素。
根實例的render選項,接收createElement方法作為第一個參數用來創建VNode。而createElement又接收APP組件作為參數。
render渲染函數生成的VNode將會替換掉掛載元素,即App.vue組件的模板內容將會替換掉index.html中的掛載元素’#app’。最終渲染出來的頁面中的’#app’元素是App.vue組件中的。
注:rende渲染函數是字符串模板template的代替方案。使用構建工具時,vue.js使用的是不包含編譯器的運行時版,而template一定要通過編譯器編譯成渲染函數,所以就用render替代了template。
