昨晚在想如果面試被問(wèn)到前端框架橱鹏,可以說(shuō)些什么莉兰,于是把對(duì)框架的思路理了一遍。
最初接觸到vue因?yàn)関ue在2016年實(shí)在太火了捶朵。當(dāng)時(shí)覺(jué)得那三個(gè)經(jīng)常并列提到的框架angular, react, vue,是時(shí)候該了解一點(diǎn)了吧珍昨,就挑了vue。
這些前端框架聽(tīng)起來(lái)很復(fù)雜,又是SPA又是虛擬DOM,很容易就把人搞暈。然后,幸虧我當(dāng)時(shí)暈了,及時(shí)放下來(lái)烤低。等熟悉了后端再來(lái)看它,我就直接用『能花樣綁定數(shù)據(jù)的模板引擎』來(lái)定義它了笆载,就是這么一回事兒嘛扑馁。
當(dāng)時(shí)我在查找該去學(xué)習(xí)哪個(gè)框架的時(shí)候就看見(jiàn)有人說(shuō)贱案,不是為了學(xué)框架而去學(xué)框架,要弄明白框架是為了解決什么問(wèn)題而出現(xiàn)的能扒。當(dāng)時(shí)我覺(jué)得答案是SPA瓢剿,后來(lái)才意識(shí)到,SPA的出現(xiàn)衣形,是因?yàn)橛辛薃JAX,解決了異步請(qǐng)求、無(wú)縫刷新的問(wèn)題缀拭。只要有AJAX咳短,SPA就能做出來(lái),這和框架并無(wú)聯(lián)系蛛淋。一個(gè)基礎(chǔ)頁(yè)面咙好,想要其他頁(yè)面就在它基礎(chǔ)上進(jìn)行各種局部刷新,把原先DOM節(jié)點(diǎn)扔掉褐荷,換成AJAX請(qǐng)求到的后端渲染好的那一小部分插進(jìn)去勾效。好了,到了這一步叛甫,問(wèn)題才會(huì)出現(xiàn)层宫。
雖然SPA完成了,但是對(duì)DOM的大量操作顯然不是件簡(jiǎn)潔的事其监,需要更合適地組織JavaScript代碼萌腿。『設(shè)計(jì)模式』 就是干這個(gè)的抖苦。MVVM把MVC的C毁菱,controller換成VM,view-model锌历。換了什么贮庞?原來(lái)是單向的,在C的控制下辩涝,M改變贸伐,V同步更新。但是SPA實(shí)現(xiàn)的時(shí)候怔揩,不是一個(gè)模板引擎把M渲染成V就完事了捉邢,最好讓M與V同步,于是把M和V都綁定到一個(gè)叫VM的東西上商膊,不但M更新V伏伐,V的變動(dòng)還會(huì)對(duì)M有影響(不完全準(zhǔn)確,但這里不展開(kāi))晕拆。
回到原先那個(gè)SPA藐翎,用上MVVM之后,頁(yè)面(即使是一部分)在后端被渲染出來(lái)实幕,到了前端還要作為M被渲染一次吝镣,干脆后端只提供數(shù)據(jù),渲染全交給前端昆庇,還能推動(dòng)前后端分離末贾。最終這些前端MVVM框架就火了。
框架就是做了這樣一件事整吆,雖然各框架明確介紹就是用來(lái)數(shù)據(jù)綁定的拱撵,但是如果像我當(dāng)時(shí)那樣還是不理解框架的意義辉川,誤解成做SPA的工具,那就走了彎路拴测。不管什么項(xiàng)目vue腳手架乓旗,react全家桶就招呼上了。vue開(kāi)發(fā)文檔開(kāi)始就介紹集索,vue可以用簡(jiǎn)單引入vue.js文件的方式直接使用屿愚。我當(dāng)時(shí)想,沒(méi)有路由沒(méi)有分組件開(kāi)發(fā)抄谐,這個(gè)東西單獨(dú)用能干嘛渺鹦。vue的作者聽(tīng)了一定很委屈,這個(gè)框架本來(lái)就是實(shí)現(xiàn)數(shù)據(jù)綁定這么件小事的啊蛹含。