Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Ϊʲô Vue3.0 ÒªÖØÐ´ÏìӦʽϵͳ
 
×÷ÕߣºÎ÷ÁëÀÏʪ
  1993  次浏览      27
 2021-3-17  
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁËΪʲô Vue3.0 ÒªÖØÐ´ÏìӦʽϵͳ ?ÏìӦʽԭÀí¡¢Object.defineProperty µÄÎÊÌâ¡¢Composition API µÄÏìӦʽϵͳµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚbilibili,ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­ÍƼö¡£

ÃæÊÔµÄʱºò¾­³£±»Îʵ½ ÏìӦʽ Ïà¹ØµÄÄÚÈÝ£¬¶øVue3.0 ¸üкó£¬ÃæÊÔ¹ÙÓÖÓÐÁËеÄÎäÆ÷£»

ÃæÊÔ¹Ù£ºÎªÊ²Ã´ Vue3.0 ÒªÖØÐ´ÏìӦʽϵͳ£¿

ã±ÆÊ÷ÉÏã±ƹû£¬ã±ÆÊ÷ÏÂÄãºÍÎÒ£¬ÃæÊÔ¹ÙÔÚÎÊʲô£¬ÎÒ¸ÃÔõô»Ø´ð£¬ÍêÈ«²»ÖªµÀÔõô»ØÊ£»

ÓÐЩ¾­ÑéµÄС»ï°é¿ÉÄÜ»á´Ó½âÊÍ Proxy µÄºÃ´¦¿ªÊ¼¼òµ¥ÁÄһϣ¬±ÈÈ磺 Proxy ÊÇÖ±½Ó´úÀí¶ÔÏ󣬶ø²»ÊǽٳֶÔÏóµÄÊôÐÔ£»¸üºÃµÄÊý×é¼à¿Ø£»

ÕâÑùµÄ»Ø´ð£¬ÃãÇ¿ËãÊǺϸñ°É

Äǵ½µ×Ó¦¸ÃÔõô´ðÄØ£¿

ÃæÊÔ¹Ù±³ºóµÄ³öÌâÂß¼­

±ð¼±£¬ÔÛÃÇÏÈÕûÀíÒ»ÏÂ˼·£¬Ëï×Ó±ø·¨ÓÐÔÆ£º¡°Öª¼ºÖª±Ë£¬°ÙÕ½²»´ù¡±£»ÃæÊÔ¾ÍÏñ´òÕÌ£¬ÄãÀ´ÎÒÍù£¬ËùÒÔÎÒÃÇÐèÒª»»Î»Ë¼¿¼£¬ÏëÒ»Ïë£¬ÎªÊ²Ã´ÃæÊÔ¹Ù»áÎÊÕâÑùÒ»¸öÎÊÌâ£¿ÃæÊÔ¹ÙÏë´ÓÕâ¸öÎÊÌâÀïµÃµ½Ê²Ã´»Ø´ð£¿Õâ¸öÎÊÌâ¿ÉÒÔ¿¼²ìÄÄЩ¼¼Êõµã£¿ ÏëÇå³þÕâ¸öÎÊÌ⣬Ôٻص½×Ô¼ºÉíÉÏ£¬ÕâЩ¼¼Êõµã£¬Äã¶¼ÕÆÎÕÁËÂð£¿

˵µÃÖ±°×Ò»µã£¬ÃæÊÔ¾ÍÏñ¿¼ÊÔ£¬ÄãÐèÒªÏÈ ¶ÁÌâ¡¢ÉóÌâ²ÅÄÜ´ðºÃÕâµÀÌ⣻

ΪʲôºÜ¶àÈËÈÏΪ ¡°ÃæÊÔÔì»ð¼ý£¬¹¤×÷Å¡ÂÝË¿¡±£¿ÒòΪûÓл»Î»Ë¼¿¼£¬Ã»ÓÐÏëÇå³þÃæÊÔÌâ±³ºóµÄÂß¼­£»

ÄÇÎÒÃÇÏëÇå³þÕâ¸öÂß¼­Ö®ºó£¬ÐèÒªÎÒÃÇ×öµÄ¾ÍÊÇÌáÈ¡¼¼Êõµã£¬ÕûÀí˼·£¬×ö³ö¶ÔÓ¦½â´ð£»µ±È»£¬Ç°ÌáÊÇÄãÐèÒª¾ß±¸ÕâЩ¼¼ÊõÄÜÁ¦

ÄÇô½ÓÏÂÀ´£¬ÎҾͳ¢ÊÔ²ð½âÒ»ÏÂÕâ¸öÃæÊÔÌâÁË£¬ÌáÈ¡ÆäÖеÄ֪ʶµã¡£

¶ÔÓÚÄãÀ´Ëµ£¬¾ÍÊÇÒª¿´¿´ÕâЩ֪ʶµã£¬Äã¶¼ÕÆÎÕÁ˶àÉÙ£¿

Ϊʲô Vue3.0 ÒªÖØÐ´ÏìӦʽϵͳ ?

ÎªÊ²Ã´ÖØÐ´£¿Èç¹û֮ǰºÃºÃµÄ£¬ÖØÐ´¾ÍûÓÐÒâÒ壬ÄÇ֮ǰ´æÔÚʲôÎÊÌ⣬ÏÖÔÚÊÇÔõô½â¾öµÄ£¿¾ÍÊǹؼüµãÁË£»

²»ÖªµÀÄã¶Ô Vue2.x µÄÏìÓ¦Ê½ÕÆÎÕ¶àÉÙ£¬ÊDz»ÊÇÇ·ÏÂÁ˼¼ÊõµÄծĨ£¿Ã»¹ØÏµ£¬ÎÒÀ´°ïÄ㻹ծ£¬ÏÈÊáÀí Vue2.x µÄÏìӦʽ£»

Æäʵ»ùÓÚÕâ¸öÃæÊÔÌ⣬±³ºó»¹Óкܶ༼Êõµã£¬ÉÏÃæÕâЩ£¬ÊÇÓ뵱ǰÌâÄ¿ÓÐÖ±½Ó¹ØÏµµÄ£¬Êµ¼ÊÃæÊÔÖУ¬ºÜÓпÉÄÜ»ùÓÚÕâЩ¼¼Êõµã£¬ÔÚ½øÐÐÉîÈë½»Á÷£¬ÕâÀï¾Í²»À©Õ¹ÁË£¬ÄãÄܰÑÏÖÔÚÕâЩÎÊÌâÀíÇå³þ£¬¾ÍËã׬µ½ÁË£»

Vue2.x ÏìӦʽ

Æäʵ¹ØÓÚÕâÒ»µã£¬ÔÚVue µÄ¹Ù·½ÎĵµÖУ¬ÔçÒѾ­Óйý˵Ã÷ÁË£¬¶øÇÒ˵µÃ·Ç³£Ïêϸ£»¹Ù·½Îĵµ

µ±Äã°ÑÒ»¸öÆÕͨµÄ JavaScript ¶ÔÏó´«Èë Vue ʵÀý×÷ΪdataÑ¡ÏVue ½«±éÀú´Ë¶ÔÏóËùÓÐµÄ property£¬²¢Ê¹ÓÃObject.defineProperty?°ÑÕâЩ property È«²¿×ªÎªgetter/setter¡£Object.definePropertyÊÇ ES5 ÖÐÒ»¸öÎÞ·¨ shim µÄÌØÐÔ£¬ÕâÒ²¾ÍÊÇ Vue ²»Ö§³Ö IE8 ÒÔ¼°¸üµÍ°æ±¾ä¯ÀÀÆ÷µÄÔ­Òò¡£

ÕâЩ getter/setter ¶ÔÓû§À´ËµÊDz»¿É¼ûµÄ£¬µ«ÊÇÔÚÄÚ²¿ËüÃÇÈà Vue Äܹ»×·×ÙÒÀÀµ£¬ÔÚ property ±»·ÃÎʺÍÐÞ¸Äʱ֪ͨ±ä¸ü¡£ÕâÀïÐèҪעÒâµÄÊDz»Í¬ä¯ÀÀÆ÷ÔÚ¿ØÖÆÌ¨´òÓ¡Êý¾Ý¶ÔÏóʱ¶Ô getter/setter µÄ¸ñʽ»¯²¢²»Í¬£¬ËùÒÔ½¨Òé°²×°vue-devtoolsÀ´»ñÈ¡¶Ô¼ì²éÊý¾Ý¸ü¼ÓÓѺõÄÓû§½çÃæ¡£

ÿ¸ö×é¼þʵÀý¶¼¶ÔÓ¦Ò»¸öwatcherʵÀý£¬Ëü»áÔÚ×é¼þäÖȾµÄ¹ý³ÌÖаѡ°½Ó´¥¡±¹ýµÄÊý¾Ý property ¼Ç¼ΪÒÀÀµ¡£Ö®ºóµ±ÒÀÀµÏîµÄ setter ´¥·¢Ê±£¬»á֪ͨ watcher£¬´Ó¶øÊ¹Ëü¹ØÁªµÄ×é¼þÖØÐÂäÖȾ¡£

ÎÒÃÇʹÓùٷ½¸øµÄÒ»ÕÅͼʾ£¬À´ÊáÀíÕû¸öÁ÷³Ì£»

ÎÒÃÇÏÈÀ´¿´Ò»¶Î´úÂë

ÏìӦʽԭÀí

data ÖÐµÄ obj ¾ÍÊÇÒ»¸öÆÕͨµÄ JavaScript ¶ÔÏó£¬Í¨¹ýµã»÷ Click °´Å¥£¬½«»ñÈ¡µ½µÄËæ»úÊý¸³Öµ¸ø this.message £¬¶ø this.message Ö¸ÏòµÄ¾ÍÊÇ data ÖÐ obj ¶ÔÏóµÄ message ÊôÐÔ£»µ±message ·¢ÉúÊý¾Ý¸Ä±äʱ£¬Ò³ÃæÖÐ H1 ±êÇ©µÄÄÚÈÝ»áËæÖ®¸Ä±ä£¬Õâ¸ö¹ý³Ì¾ÍÊǾÍÊÇÏìӦʽµÄ£»ÄÇôVue ÊÇÈçºÎʵÏÖµÄÄØ£¿

Ê×ÏÈ£¬Vue ÄÚ²¿Ê¹Óà Object.defineProperty() ½« Data ÖеÄÿһ¸ö³ÉÔ±¶¼×ª»»Îª getter / setter µÄÐÎʽ£»getterÓÃÀ´ÒÀÀµÊÕ¼¯£¬setter?ÓÃÀ´ÅÉ·¢¸üУ»¶øÄ£°åÄÚÈÝ£¬×îÖջᱻ±àÒëΪ render º¯Êý£¬ÔÚ render º¯ÊýÖУ¬ÎÒÃÇÄÜ·¢ÏÖ_v(_s(message))?message ±»·ÃÎÊÁË£¬¾Í»á´¥·¢ getter À´½øÐÐÒÀÀµÊÕ¼¯£¬¶øÔÚ´úÂëÖеĵã»÷ʼþÖУ¬Ò»µ©Ê¼þ´¦Àí³ÌÐò±»´¥·¢Ö´ÐУ¬ÄÇô message Ôò»á±»Ð޸ģ¬¾Í»á´¥·¢ setterÀ´½øÐÐÅÉ·¢¸üУ»

ËäÈ»Á÷³ÌÀíÇå³þÁË£¬µ«ÊÇ×ܸоõÉÙµãʲô£¬Ôõô²ÅÄܸüÍ¨Í¸ÄØ£¿

ÎÒÃÇÓôúÂëÀ´Ä£ÄâÕû¸öµÄʵÏÖ¹ý³Ì£»

defineProperty Ä£Äâ´úÂë

defineProperty µÄ»ù±¾Ó÷¨£¬Ö±½Ó¿´ÊÖ²á¾ÍÐÐÁË£º

ÎÒÃÇÀ´¿´¿´´úÂ룺

ÄãûÓп´´í£¬¼ÓÉÏ×¢ÊÍ£¬Ò»¹² 36ÐдúÂ룬Õâ¾ÍÊÇ Vue2.x ¶ÔÏìӦʽʵÏÖµÄÕû¸öÁ÷³Ì£»

¼ÌÐøÊµÏÖ¶à¸öÊý¾ÝµÄÏìӦʽ

ÉÏÃæµÄ´úÂëÖ»ÊÇÄ£ÄâÁË ÏìӦʽ µÄÔ­Àí£¬µ«VueÔÚʵÏÖÖУ¬¿Ï¶¨²»»áÄÇô¼òµ¥£¬½ÓÏÂÀ´£¬ÎÒÃÇ¿´Ò»ÏÂÔ´Âëѽ¡­¡­

Vue2 Ô´Âë½â¶Á

Ê×ÏÈÕÒµ½ÏìӦʽ´úÂëµÄ´¦ÀíλÖãº

¿´ÍêVue2.x ÏìӦʽµÄ´úÂ룬ÎÒÃÇÔٻعýÍ·À´Ë¼¿¼×ʼµÄÎÊÌ⣬Ϊʲô Vue3.0 ÒªÖØÐ´ÏìӦʽϵͳ ?

ÎªÊ²Ã´ÖØÐ´£¿Èç¹û֮ǰºÃºÃµÄ£¬ÖØÐ´¾ÍûÓÐÒâÒ壬ÄÇ֮ǰ´æÔÚʲôÎÊÌ⣬»»¾ä»°ÎʾÍÊÇ defineProperty ?ÓÐʲôÎÊÌ⣿

Object.defineProperty µÄÎÊÌâ

Æäʵ£¬ defineProperty µÄÎÊÌ⣬ÔÚVue2.x µÄÊÖ²áÖУ¬ÒѾ­Ëµ¹ýÁË£»¡°°¥£¬ºÜ¶àÈ˾ÍÊDz»¿´Îĵµ°¡¡±

ÏÂÃæ·Ö±ðʹÓà Vue2 ºÍ Vue3 ʵÏÖÁËÒ»¸öС¹¦ÄÜ£¬´úÂëһģһÑù£¬¹¦Äܵ±È»Ò²Ò»Ñù£¬µ«ÊÇ£¬ÔÚ Vue2 ÖоͻáÓÐBug£¬¶øÔËÐÐÔÚvue3Öеģ¬ÔòûÓÐÈκÎÎÊÌ⣻

Vue2:

Vue3£º

ÆäºËÐĵãÔÚÓÚ defineProperty ²»ÄܺܺõÄʵÏÖ¶ÔÊý×éϱêµÄ¼à¿Ø£¬¶øÔÚ Vue2 µÄʵÏÖ´úÂëÖУ¬Ã»ÓиüºÃµÄ·½°¸¶Ô´Ë½øÐиÄÉÆ£¬ÓÈ´óË÷ÐÔÖ±½Ó·ÅÆúÁËʵÏÖ£»¹ØÓÚÕâ¸öÎÊÌ⣬ÓÈ´óÒ²ÔÚ github ×ö¹ý»ØÓ¦£¬½Ø¸öͼ¸ø´ó¼Ò¿´¿´£»

ÄÇô£¬Vue Ŀǰ»¹Ã»Óнâ¾öµÄÎÊÌ⣬Vue3ÖÐÏÔÈ»ÊÇÒѾ­½â¾öµÄÁË£¬ÎÊÌâÊÇ£¬Vue3 ÊÇÈçºÎ½â¾öµÄÄØ£¿Ç°ÃæÔÚ Vue3 µÄ´úÂëÖÐÎÒÃÇʹÓõÄÊÇ´«Í³µÄ Options Api À´ÊµÏÖµÄÊý¾ÝÏìӦʽ£¬ ¶øÔÚ Vue3 ÖÐÈ«Ð嵀 Composition Api ҲʵÏÖÁËÏìӦʽϵͳ£¬ÎÒÃÇÏÈÀ´¸ÐÊÜһϠComposition Api µÄ»ù´¡Ó÷¨

Composition API µÄÏìӦʽϵͳ

ref ÏìӦʽ

reactive ÏìӦʽ

Vue3 ÖеÄÏìӦʽÊÇÈçºÎʵÏÖµÄÄØ£¿¹Ø¼üµãÔÚÓÚProxy º¯Êý£»

Proxy ʵÏÖÔ­Àí

ʹÓà Proxy ʵÏÖµÄÏìӦʽ´úÂ룬Ҫ±ÈʹÓà defineProperty µÄ´úÂë¼òµ¥µÃ¶à£¬ÒòΪ Proxy ÌìÈ»µÄÄܹ»¶ÔÕû¸ö¶ÔÏó×ö¼àÌý£¬¶ø²»ÐèÒª¶ÔÊý¾ÝÐбéÀúºó×ö¼àÌý£¬Í¬Ê±Ò²¾Í½â¾öÁËÊý×éϱêµÄÎÊÌ⣻

ÎÒÃÇÀ´Ò»¶ÎÄ£Äâ´úÂ뿴һϣº

 

 
   
1993 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
ÈçºÎÉè¼Æ¸ßÀ©Õ¹µÄÔÚÏßÍøÒ³ÖÆ×÷ƽ̨
electronÈëÃÅÐĵÃ
ʹÓà Electron ¹¹½¨×ÀÃæÓ¦ÓÃ
VUE.JS×é¼þ»¯¿ª·¢Êµ¼ù
ÉîÈëÀí½âJSCore
×îпγÌ
HTML 5 + CSS3 Ô­ÀíÓ뿪·¢Ó¦ÓÃ
Webǰ¶Ë¸ß¼¶¹¤³Ìʦ±Ø±¸¼¼ÄÜʵս
Vue´óÐÍÏîÄ¿¿ª·¢ÊµÕ½
ReactÔ­ÀíÓëʵ¼ù
Vue.js½ø½×Óë°¸Àýʵ¼ù
³É¹¦°¸Àý
Öн»¼¯ÍÅ ¹¹½¨Web×Ô¶¯»¯²âÊÔ¿ò¼Ü
ijָÃûµçÐŹ«Ë¾ Vue.js½ø½×Óë°¸Àý
¹úµçÍ¨ÍøÂç¼¼Êõ HTML5+CSS3 +webǰ¶Ë¿ò
ÒÆ¶¯Í¨ÐÅ ÒÆ¶¯»¥ÁªÍøÓ¦Óÿª·¢Ô­Àí
ijµçÁ¦ÐÐ android¿ª·¢Æ½Ì¨×î¼Ñ