個(gè)人認(rèn)為,react和vue的業(yè)務(wù)邏輯是差不多,vue在react上封裝了更簡(jiǎn)潔的方法,使用起來更加的便捷,如:提供了便捷的指令(v-for,v-if,v-model),還提供了更多的屬性(computed,watch),我還是比較喜歡用react的,更接近js原生,更容易于理解它。
10年積累的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有石家莊免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
一 vue的生命周期如下圖所示(很清晰)初始化、編譯、更新、銷毀
二 vue生命周期的栗子
注意觸發(fā)vue的created事件以后,this便指向vue實(shí)例,這點(diǎn)很重要
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>vue生命周期</title> <script src="../js/vue.js"></script> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> </head> <body> <div class="test" > {{a}} </div> <div class="test2" > 我是內(nèi)容二 </div> <script type="text/javascript"> var myVue = new Vue({ el: ".test", data: { a: "我是內(nèi)容,在控制臺(tái)輸入myVue.a=123456,可以改變我的值" }, created: function () { //在實(shí)例創(chuàng)建之后同步調(diào)用。此時(shí)實(shí)例已經(jīng)結(jié)束解析選項(xiàng),這意味著已建立:數(shù)據(jù)綁定,計(jì)算屬性,方法,watcher/事件回調(diào)。 //但是還沒有開始 DOM 編譯,$el 還不存在,但是實(shí)例存在,即this.a存在,可打印出來 。 console.log("建立"); }, beforeCompile: function () { console.log("未開始編譯"); }, compiled: function () { //在編譯結(jié)束后調(diào)用。此時(shí)所有的指令已生效,因而數(shù)據(jù)的變化將觸發(fā) DOM 更新。但是不擔(dān)保 $el 已插入文檔。 console.log("編譯完成"); }, ready: function () { //在編譯結(jié)束和 $el 第一次插入文檔之后調(diào)用,如在第一次 attached 鉤子之后調(diào)用。注意必須是由 Vue 插入(如 vm.$appendTo() 等方法或指令更新)才觸發(fā) ready 鉤子。 console.log("一切準(zhǔn)備好了"); }, attached :function () { //myVue.$appendTo(".test2")暫時(shí)觸發(fā)不了,不知道怎么解決 //在 vm.$el 插入 DOM 時(shí)調(diào)用。必須是由指令或?qū)嵗椒ǎㄈ?$appendTo())插入,直接操作 vm.$el 不會(huì) 觸發(fā)這個(gè)鉤子。 console.log("插入DOM成功"); }, detached :function () { //觸發(fā)事件 myVue.$destroy(true),其中參數(shù)true控制是否刪除DOM節(jié)點(diǎn)或者myVue.$remove() //在 vm.$el 從 DOM 中刪除時(shí)調(diào)用。必須是由指令或?qū)嵗椒▌h除,直接操作 vm.$el 不會(huì) 觸發(fā)這個(gè)鉤子。 console.log("刪除DOM成功"); }, beforeDestroy: function () { //觸發(fā)方式,在console里面打myVue.$destroy(); //在開始銷毀實(shí)例時(shí)調(diào)用。此時(shí)實(shí)例仍然有功能。 console.log("銷毀前"); }, destroyed: function () { //觸發(fā)方式,在console里面打myVue.$destroy();其中myVue.$destroy(true)是刪除DOM節(jié)點(diǎn),會(huì)觸發(fā)detached函數(shù),但是實(shí)例仍然存在 //在實(shí)例被銷毀之后調(diào)用。此時(shí)所有的綁定和實(shí)例的指令已經(jīng)解綁,注意是解綁不是銷毀,所有的子實(shí)例也已經(jīng)被銷毀。 console.log("已銷毀"); } }); </script> </body> </html>
一、react生命周期
React 生命周期分為三種狀態(tài) 1. 初始化 2.更新 3.銷毀
•初始化
1、getDefaultProps()
設(shè)置默認(rèn)的props,也可以用ufaultProps設(shè)置組件的默認(rèn)屬性.
2、getInitialState()
在使用es6的class語(yǔ)法時(shí)是沒有這個(gè)鉤子函數(shù)的,可以直接在constructor中定義this.state。此時(shí)可以訪問this.props
3、componentWillMount()
組件初始化時(shí)只調(diào)用,以后組件更新不調(diào)用,整個(gè)生命周期只調(diào)用一次,此時(shí)可以修改state。
4、 render()
react最重要的步驟,創(chuàng)建虛擬dom,進(jìn)行diff算法,更新dom樹都在此進(jìn)行。此時(shí)就不能更改state了。
5、componentDidMount()
組件渲染之后調(diào)用,只調(diào)用一次。
•更新
6、componentWillReceiveProps(nextProps)
組件初始化時(shí)不調(diào)用,組件接受新的props時(shí)調(diào)用。
7、shouldComponentUpdate(nextProps, nextState)
react性能優(yōu)化非常重要的一環(huán)。組件接受新的state或者props時(shí)調(diào)用,我們可以設(shè)置在此對(duì)比前后兩個(gè)props和state是否相同,如果相同則返回false阻止更新,因?yàn)橄嗤膶傩誀顟B(tài)一定會(huì)生成相同的dom樹,這樣就不需要?jiǎng)?chuàng)造新的dom樹和舊的dom樹進(jìn)行diff算法對(duì)比,節(jié)省大量性能,尤其是在dom結(jié)構(gòu)復(fù)雜的時(shí)候
8、componentWillUpdata(nextProps, nextState)
組件初始化時(shí)不調(diào)用,只有在組件將要更新時(shí)才調(diào)用,此時(shí)可以修改state
9、render()
組件渲染
10、componentDidUpdate()
組件初始化時(shí)不調(diào)用,組件更新完成后調(diào)用,此時(shí)可以獲取dom節(jié)點(diǎn)。
•卸載
11、componentWillUnmount()
組件將要卸載時(shí)調(diào)用,一些事件監(jiān)聽和定時(shí)器需要在此時(shí)清除。
總結(jié)
以上所述是小編給大家介紹的vue生命周期和react生命周期對(duì)比,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!
網(wǎng)頁(yè)題目:vue生命周期和react生命周期對(duì)比【推薦】
文章源于:http://aaarwkj.com/article30/iihhso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、小程序開發(fā)、微信小程序、定制網(wǎng)站、自適應(yīng)網(wǎng)站、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)