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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ReactÒÆ¶¯web¼«ÖÂÓÅ»¯
 
×÷Õߣº Bugly_Tony ·¢²¼ÓÚ£º 2017-11-6
  3097  次浏览      32
 

×î½üÒ»¸ö¼¾¶È£¬ÎÒÃǶ¼ÔÚΪÊÖQ¼ÒУȺ×öÖØ¹¹ÓÅ»¯£¬½«Ô­ÓÐÄÇÌ×ÎÊÌâ²»¶ÏµÄ¿ò¼Ü»»µô¡£¾­¹ýһЩÕå×㬾ö¶¨Ê¹ÓÃreact ½øÐÐÖØ¹¹¡£Ñ¡Ôñreact£¬ÆäʵҲÖ÷ÒªÊÇÒòΪËü¾ßÓÐÏÂÃæµÄÈý´óÌØÐÔ¡£

ReactµÄÌØÐÔ

1.Learn once, write anywhere

ѧϰReactµÄºÃ´¦¾ÍÊÇ£¬Ñ§ÁËÒ»±éÖ®ºó£¬Äܹ»Ð´web, nodeÖ±³ö£¬ÒÔ¼°native£¬Äܹ»ÊÊÓ¦¸÷ÖÖ·×·±¸´ÔÓµÄÒµÎñ¡£ÐèÒªÇáÁ¿¿ì½ÝµÄ£¬Ö±½Ó¿ÉÒÔÓÃReactjs£»ÐèÒªÌáÉýÊׯÁʱ¼äµÄ£¬¿ÉÒÔ½áºÏReact Server Render£»ÐèÒª¸üºÃµÄÐÔÄܵģ¬¿ÉÒÔÉÏReact Native¡£

µ«ÊÇ£¬ÕâÆäʵ°µÊ¾Ñ§Ï°µÄÇúÏ߷dz£¶¸ÇÍ¡£µ¥µ¥ÊÇWebpack+ React + Redux¾ÍÒѹ»Ò»¸öÈëÃÅÕß¹»Çº£¬¸üºÎ¿ö»¹Òª¼æ¹ËÖ±³öºÍÊÖ»ú¿Í»§¶Ë¡£²»ÊÇÒ»°ãÈËÄÜholdסËùÓжˡ£

2.Virtual Dom

Virtual Dom£¨Ï³Ævd£©ËãÊÇReactµÄÒ»¸öÖØ´óµÄÌØÉ«£¬ÒòΪFacebookÐû³ÆÓÉÓÚvdµÄ°ïÖú£¬ReactÄܹ»´ïµ½ºÜºÃµÄÐÔÄÜ¡£Êǵģ¬Facebook˵µÄû´í£¬µ«Ö»ËµÁËÒ»°ë£¬Ëü˵©µÄÒ»°ëÊÇ£º¡°³ý·ÇÄãÄÜÕýÈ·µÄ²ÉÓÃһϵÁÐÓÅ»¯ÊֶΡ±¡£

3.×é¼þ»¯

ÁíÒ»¸ö±»´ó¼ÒËùÍÆ³çµÄReactÓÅÊÆÔÚÓÚ£¬ËüÄÜÁîµ½ÄãµÄ´úÂë×éÖ¯¸üÇåÎú£¬Î¬»¤ÆðÀ´¸üÈÝÒס£ÎÒÃÇÔÚдµÄʱºòÒ²ÓÐͬ¸Ð£¬µ«ÄÇÊÇÖ±µ½ÎÒÃDzÈÁËһЩ¿Ó£¬²¢ÇÒ½¥½¥ÊìϤReact+ ReduxËùÍÆ³çµÄÄÇÌ×´úÂë×éÖ¯¹æ·¶Ö®ºó¡£

ÄÇô£¿

ÉÏÃæµÄÃèÊö²»ÃâÓÐЩÏÈÑïºóÒֵĸоõ£¬ÄÇÊÇÒòΪÍùÍù×÷ΪReactµÄ¸ÕÈëÃÅÕߣ¬¶¼»áÏñÎÒÃdzõÈëµÄʱºòÒ»Ñù£¬¶ÔReactÂú»³Ï£Íû£¬Ö¸ÒâËü°ïÎÒÃÇ×öºÃÒ»ÇУ¬µ«Ëæ×ÅÁ˽âµÄÉîÈ룬·¢ÏÖÐèÒª×öһЩ¶îÍâµÄÊÂÇéÀ´´ïµ½ÎÒÃÇµÄÆÚ´ý¡£

¶ÔReactµÄÆÚ´ý

³õѧÕß¶ÔReact¿ÉÄÜÂú»³ÆÚ´ý£¬¾õµÃReact¿ÉÄÜÍ걬ÆäËüÒ»Çпò¼Ü£¬ÉõÖÁ²»ÇÐʵ¼ÊµØÈÏΪReact¿ÉÄÜÁ¬Ô­ÉúµÄäÖȾ¶¼ÄÜÍ걬¡ª¡ª¶Ô¿ò¼ÜµÄ¿ñÈÈȷʵ»á³öÏÖÕâÑùµÄ²»ÇÐʵ¼ÊµÄÆÚ´ý¡£ÈÃÎÒÃÇÀ´¿´¿´ReactµÄ¹Ù·½ÊÇÔõô˵µÄ¡£React¹Ù·½ÎĵµÔÚAdvanced PerformanecÕâÒ»½Ú£¬ÕâÑùдµÀ£º

One of the first questions people ask when considering React for a project is whether their application will be as fast and responsive as an equivalent non-React version

ÏÔÈ»React×Ô¼ºÒ²ÆäʵֻÊÇÏ뾡Á¿´ïµ½¸ú·ÇReact°æ±¾ÏàÈôµÄÐÔÄÜ¡£ReactÔÚ¼õÉÙÖØ¸´äÖȾ·½ÃæÈ·ÊµÊÇÓÐÒ»Ì×¶ÀÌØµÄ´¦Àí°ì·¨£¬ÄǾÍÊÇvd£¬µ«ÏÔʾÔÚÊ×´ÎäÖȾµÄʱºòReact¾øÎÞ¿ÉÄܳ¬Ô½Ô­ÉúµÄËÙ¶È£¬»òÕßÒ»¶¨Äܽ«ÆäËüµÄ¿ò¼Ü±ÈÏÂÈ¥¡£Òò´Ë£¬ÎÒÃÇÔÚ×öÓÅ»¯µÄʱºò£¬¿ÉµÄÆÚ´ýµÄ¶«Î÷ÓУº

1.ÊׯÁʱ¼ä¿ÉÄÜ»á±È½ÏÔ­ÉúµÄÂýһЩ£¬µ«¿ÉÒÔ³¢ÊÔÓÃReact Server Render (ÓÖ³ÆIsomorphic)È¥Ìá¸ßЧÂÊ

2.Óû§½øÐн»»¥µÄʱºò£¬ÓпÉÄÜ»á±ÈÔ­ÉúµÄÏìÓ¦¿ìһЩ£¬Ç°ÌáÊÇÄã×öÁËһЩÓÅ»¯±ÜÃâÁËÀË·ÑÐÔÄܵÄÖØ¸´äÖȾ¡£

ÒÔÊÖQ¼ÒУȺ¹¦ÄÜÒ³ReactÖØ¹¹ÓÅ»¯ÎªÀý

ÊÖQ¼ÒУȺ¹¦ÄÜÒ³Ö÷ÒªÓÉÈý¸öÒ³Ãæ¹¹³É£¬·Ö±ðÊÇÁбíÒ³¡¢²¼ÖÃÒ³ºÍÏêÇéÒ³¡£ÁбíÒ³ÒѾ­Öع¹Íê³É²¢ÒÑ·¢²¼£¬²¼ÖÃÒ³ÒÑÖØ¹¹Íê±Ï×¼±¸Ìá²â£¬ÏêÇéÒ³ÕýÔÚÖØ¹¹¡£Óë´ËͬʱÎÒÃÇÒÑÍê³É¶ÔÁбíÒ³µÄͬ¹¹Ö±³öÓÅ»¯£¬²¢ÒÑÕýÔÚ×öReact NativeÓÅ»¯µÄÆÌµæ¡£

ÕâÈý¸öÒ³ÃæµÄÖØ¹¹Æäʵ¸²¸ÇÁ˲»ÉÙÒ³ÃæµÄ°¸Àý£¬ËùÒÔ»¹ÊÇÂùÓдú±íÐԵģ¬ÎÒÃÇ»á½«ÖØ¹¹Ö®ÖÐÓöµ½µÄһЩ¾­Ñé´©²åÔÚÎÄÕÂÀïÂÛÊö¡£

ÔÚÊÖQ¼ÒÐ£ÈºÖØ¹¹Ö®Ç°£¬ÆäʵÎÒÃÇÒѾ­×öÁËÒ»°æPC¼ÒУȺ¡£µ±Ê±½«nativeµÄÒ³ÃæÈ«²¿web»¯£¬Ö±½Ó¾Í²ÉÓÃÁËReact±È½Ï³£ÓõÄÈ«¼ÒͰÌ××°£º

1.¹¹½¨¹¤¾ß => gulp + webpack

2.¿ª·¢Ð§ÂÊÌáÉý => redux-dev-tools + hot-reload

3.ͳһÊý¾Ý¹ÜÀí=> redux

4.ÐÔÄÜÌáÉý => immutable + purerender

5.·ÓÉ¿ØÖÆÆ÷ => react-router(ÊÖQÔÝʱû²ÉÓÃ)

ΪʲôÎÒÃÇÔÚÓÅ»¯µÄʱºòÖ÷Òª½²ÊÖQÄØ£¿±Ï¾¹PCµÄÐÔÄÜÔڴ󲿷ÝÇé¿öÏÂÒѾ­ºÜºÃ£¬ÔÚPCÉÏһЩ´æÔÚµÄÎÊÌâ¶¼±»PCÁ¼ºÃµÄÐÔÄÜÑÚ¸ÇÏÂÈ¥¡£ÊÖ»úµÄÐÔÄܲ»ÈçPC£¬Òò´ËÓиü¶àÓмÛÖµµÄ¶«Î÷ÉîÍÚ¡£¿ª·¢µÄʱºòÎҾ͸úͬÊ¿ªÍæÐ¦Ëµ£º¡°Ã»×ö¹ýÊÖ»úwebÓÅ»¯µÄ¶¼Õæ²»ºÃÒâ˼˵×Ô¼º×ö¹ýÐÔÄÜÓÅ»¯°¡¡°¡£

¹¹½¨Õë¶ÔReact×öµÄÓÅ»¯

ÎÒÔÚ¡¶ÐÔÄÜÓÅ»¯Èý²¿ÇúÖ®Ò»¡ª¡ª¹¹½¨Æª¡·Ìá³ö£¬¡°Í¨¹ý¹¹½¨£¬ÎÒÃÇ¿ÉÒÔ´ï³É¿ª·¢Ð§ÂʵÄÌáÉý£¬ÒÔ¼°¶ÔÏîÄ¿×î»ù±¾µÄÓÅ»¯¡±¡£ÔÚ½øÐÐReactÖØ¹¹ÓÅ»¯µÄ¹ý³ÌÖУ¬¹¹½¨¶ÔÏîÄ¿µÄÓÅ»¯×÷Óñز»¿ÉÉÙ¡£ÔÚ±¾ÎÄÔÝʱ²»×¸Êö£¬ÎÒÁíÍ⿪±ÙÁËһƪ¡¶webpackʹÓÃÓÅ»¯£¨reactƪ£©¡·½øÐоßÌåÂÛÊö¡£

¿ª·¢Ð§ÂÊÌáÉý¹¤¾ß

ÔÚPC¶ËʹÓÃReduxµÄʱºò£¬ÎÒÃǶ¼ºÜϲ»¶Ê¹ÓÃRedux-DevtoolsÀ´²é¿´Redux´¥·¢µÄaction£¬ÒÔ¼°¶ÔÓ¦µÄÊý¾Ý±ä»¯¡£PC¶ËʹÓõÄʱºò£¬ÎÒÃÇϰ¹ß°ÚÔÚÓұߡ£µ«Òƶ¯¶ËµÄÆÁÄ»½ÏÉÙ£¬Òò´Ë¼ÒУȺÏîĿʹÓõÄʱºò·ÅÔڵײ¿£¬¶øÇÒÓÉÓÚÐÔÄÜÎÊÌ⣬ÎÒÃÇÔÚconstantÀïÉèÒ»¸ödebug²ÎÊý£¬È»ºóÔÚchromeµ÷ÊÔʱ´ò¿ª£¬Òƶ¯¶Ë·Ç±ØÐëµÄʱºò¹Ø±Õ¡£·ñÔò£¬Ëü»áµ¼ÖÂÒÆ¶¯webµÄäÖȾ±È½ÏµÍÏ¡£

Êý¾Ý¹ÜÀí¼°ÐÔÄÜÓÅ»¯

Reduxͳһ¹ÜÀíÊý¾Ý

ÕâÒ»²¿·ÝËãÊÇÖØÍ·Ï·°É¡£React×÷ΪView²ãµÄ¿ò¼Ü£¬ÒѾ­Í¨¹ývd°ïÖúÎÒÃǽâ¾öÖØ¸´äÖȾµÄÎÊÌâ¡£µ«vdÊÇͨ¹ý¿´Êý¾ÝµÄǰºó²îÒìÈ¥ÅжÏÊÇ·ñÒªÖØ¸´äÖȾµÄ£¬µ«React²¢Ã»ÓаïÖúÎÒÃÇÈ¥×öÕâ²ã±È½Ï¡£Òò´ËÎÒÃÇÐèҪʹÓÃÒ»ÕûÌ×Êý¾Ý¹ÜÀí¹¤¾ß¼°¶ÔÓ¦µÄÓÅ»¯·½·¨È¥´ï³É¡£ÔÚÕâ·½·¨£¬ÎÒÃÇÑ¡ÔñÁËRedux¡£

ReduxÕû¸öÊý¾ÝÁ÷´óÌå¿ÉÒÔÓÃÏÂͼÀ´ÃèÊö£º

ReduxÕâ¸ö¿ò¼ÜµÄºÃ´¦ÔÚÓÚÄܹ»Í³Ò»ÔÚ×Ô¼º¶¨ÒåµÄreducerº¯ÊýÀïÃæÈ¥½øÐÐÊý¾Ý´¦Àí£¬ÔÚView²ãÖÐÖ»ÐèҪͨ¹ýʼþÈ¥´¦´¥·¢Ò»Ð©action¾Í¿ÉÒÔ¸Ä±äµØÓ¦µÄÊý¾Ý£¬ÕâÑùÄܹ»Ê¹Êý¾Ý´¦ÀíºÍdomäÖȾ¸üºÃµØ·ÖÀ룬¶ø±ÜÃâÊÖ¶¯µØÈ¥ÉèÖÃstate¡£

ÔÚÖØ¹¹µÄʱºò£¬ÎÒÃÇÇãÏòÓÚ½«¹¦ÄÜÀàËÆµÄÊý¾Ý¹éÀൽһÆð£¬²¢½¨Á¢¶ÔÓ¦µÄreducerÎļþ¶ÔÊý¾Ý½øÐд¦Àí¡£ÈçÏÂͼ£¬ÊÇÊÖQ¼ÒУȺ²¼ÖÃÒ³µÄÊý¾Ý½á¹¹¡£ÓÐЩ´óÐ͵ÄSPAÏîÄ¿¿ÉÄܻὫ³õʼÊý¾Ý·Ö¿ªÔÚ²»Í¬µÄreducerÎļþÀµ«ÕâÀïÎÒÃÇÇãÏòÓڹ鵽һ¸östoreÎļþ£¬ÕâÑùÄܹ»ÇåÎúµØÖªµÀÕû¸öÎļþµÄÊý¾Ý½á¹¹£¬Ò²·ûºÏReduxÏëͳһ¹ÜÀíÊý¾ÝµÄÏë·¨¡£È»ºóÊý¾ÝµÄÿ¸ö²ã¼¶ÓëreducerÎļþ¶¼ÊÇÒ»Ò»¶ÔÓ¦µÄ¹ØÏµ¡£

ÖØ¸´äÖȾµ¼Ö¿¨¶Ù

ÕâÌ×React + ReduxµÄ¶«Î÷ÔÚPC¼ÒÐ£ÈºÒ³ÃæÉÏÓõúܻ¶ÀÖ£¬ ÒÔÖÁÓÚ²»ÓÃÔõôдshouldComponentUpdate¶¼Ã»Óöµ½¹ýʲôÐÔÄÜÎÊÌâ¡£µ«·Åµ½Òƶ¯¶ËÉÏ£¬ÎÒÃÇÔÚÁбíÒ³ÖØ¹¹µÄʱºò¾ÍÂíÉÏÓöµ½¿¨¶ÙµÄÎÊÌâÁË¡£

ʲôԭÒòÄØ£¿ÊÇÖØ¸´äÖȾµ¼Öµģ¡£¡£¡£¡£¡£¡

˵ºÃµÄReact vd¿ÉÒÔ¼õÉÙÖØ¸´äÖÈ¾ÄØ£¿£¡£¡£¡

Çë±ðÍü¼ÇǰÌáÌõ¼þ£¡£¡£¡£¡

Äã¿ÉÒÔÔÚÿ¸öcomponentµÄrenderÀ·ÅÒ»¸öconsole.log(¡°xxx component¡±)¡£È»ºó´¥·¢Ò»¸öaction£¬ÔÚÓÅ»¯Ö®Ç°£¬¼¸ºõÈ«²¿µÄcomponent¶¼´ò³öÕâ¸ölog£¬±íÃ÷¶¼Öظ´äÖȾÁË¡£

¸üÕý£º¿É¼ûºóÃæyeatszhangͬѧµÄ½âÊÍ¡£

ReactÐÔÄܵľÈÐÇImmutablejs

(ÍøÍ¼£¬ÒýÓõÄÎÄÕÂÌ«¶àÒÔÖÂÓÚ²»ÖªµÀÄÄÆª²ÅÊdzö´¦)

ÉÏͼÊÇReactµÄÉúÃüÖÜÆÚ£¬»¹Ã»ÊìϤµÄͬѧ¿ÉÒÔÈ¥ÊìϤһÏ¡£ÒòΪÆäÖеÄshouldComponentUpdateÊÇÓÅ»¯µÄ¹Ø¼ü¡£ReactµÄÖØ¸´äÖȾÓÅ»¯µÄºËÐÄÆäʵ¾ÍÊÇÔÚshouldComponentUpdateÀïÃæ×öÊý¾Ý±È½Ï¡£ÔÚÓÅ»¯Ö®Ç°£¬shouldComponentUpdateÊÇĬÈÏ·µ»ØtrueµÄ£¬Õâµ¼ÖÂÈκÎʱºò´¥·¢ÈκεÄÊý¾Ý±ä»¯¶¼»áʹcomponentÖØÐÂäÖȾ¡£Õâ±ØÈ»»áµ¼ÖÂ×ÊÔ´µÄÀ˷ѺÍÐÔÄܵĵÍÏ¡ª¡ªÄã¿ÉÄÜ»á¸Ð¾õ±È½ÏÔ­ÉúµÄÏìÓ¦¸üÂý¡£

ÕâʱÄ㿪ʼ»³ÒÉÕâÊÀ½ç¡ª¡ªÊDz»ÊÇFacebookÔÚÆ­ÎÒ¡£

µ±Ê±Óöµ½Õâ¸öÎÊÌâÎҵĿªÊ¼·­ÔÄÎĵµ£¬Ò²ÊÇÔÚFacebookµÄAdvanced PerformanceÒ»½ÚÖÐÕÒµ½´ð°¸£ºImmutablejs¡£Õâ¸ö¿ò¼ÜÒѱ»´µÁËÓÐÒ»Äê¶àÁ˰ɣ¬´µÕâЩ¿ò¼ÜµÄÈËÀí½âËüµÄÔ­Àí£¬µ«²»Ò»¶¨Êµ¼ù¹ý¡ª¡ªÒòΪ×÷ΪһÏßÒÆ¶¯¶Ë¿ª·¢Õߣ¬´ò¿ªËüµÄgithubÖ÷Ò³¿´distÎļþ£¬50kb£¬ÎÒ¾ÍÒѾ­´òÍËÌùÄÁË¡£Ö»ÊÇÓöµ½ÁËÐÔÄÜÎÊÌ⣬ÎÒÃDzÅÔÙÈÏÕæµØÈ¥Á˽âÒ»±é¡£

ImmutableÕâ¸öµÄÒâ˼¾ÍÊDz»¿É±ä£¬Immutablejs¾ÍÊÇÒ»¸öÉú³ÉÊý¾Ý²»¿É±äµÄ¿ò¼Ü¡£Ò»¿ªÊ¼Äã²¢²»Àí½â²»¿É±äÓÐʲôÓá£×ʼµÄʱºòImmutableÕâÖÖÊý¾Ý½á¹¹ÊÇΪÁ˽â¾öÊý¾ÝËøµÄÎÊÌ⣬¶ø¶ÔÓÚjs£¬¾Í¿ÉÒÔ½èÓÃÀ´½â¾öǰºóÊý¾Ý±È½ÏµÄÎÊÌ⡪¡ªÒòΪͬʱImmutablejs»¹ÌṩÁ˺ܺõÄÊý¾Ý±È½Ï·½·¨¡ª¡ªImmutable.is()¡£Ð¡½áһϾÍÊÇ£º

1.Immutablejs±¾Éí¾ÍÄÜÉú³É²»¿É±äÊý¾Ý£¬ÕâÑù¾Í²»ÐèÒª¿ª·¢Õß×Ô¼ºÈ¥×öÊý¾ÝÉ±´£¬¿ÉÒÔÖ±½ÓÄÃprevProps/prevStateºÍnextProps/nextStateÀ´±È½Ï¡£

2.Immutable±¾Éí»¹ÌṩÁËÊý¾ÝµÄ±È½Ï·½·¨£¬ÕâÑù¿ª·¢ÕßÒ²²»ÓÃ×Ô¼ºÈ¥Ð´Êý¾ÝÉî±È½ÏµÄ·½·¨¡£

˵µ½ÕâÀÒÑÍòʾ㱸ÁË¡£ÄǶ«·çÄØ£¿ÎÒÃÇ»¹Ç·µÄ¶«·ç¾ÍÊÇÓ¦¸ÃÔÚÄÄÀïдÕâ¸ö±È½Ï¡£´ð°¸¾ÍÊÇshouldComponentUpdate¡£Õâ¸öÉúÃüÖÜÆÚ»á´«ÈënextPropsºÍnextState£¬¿ÉÒÔ¸úcomponentµ±Ç°µÄpropsºÍstateÖ±½Ó±È½Ï¡£Õâ¸ö¾Í¿ÉÒԲο¼pure-renderµÄ×ö·¨£¬È¥ÖØÐ´shouldComponentUpdate£¬ÔÚÀïÃæÐ´Êý¾Ý±È½ÏµÄÂß¼­¡£

ÆäÖÐһλͬÊÂpolarjiangÀûÓÃImmutablejsµÄis·½·¨£¬²Î¿¼pure-render-decoratorдÁËÒ»¸öimmutable-pure-render-decorator¡£

ÄǾßÌåÔõôʹÓÃimmutable + pure-renderÄØ£¿

¶ÔÓÚimmutable£¬ÎÒÃÇÐèÒª¸ÄдһÏÂreducer functionsÀïÃæµÄ´¦ÀíÂß¼­£¬Ò»ÂÉ»»³ÉImmutableµÄapi¡£

ÖÁÓÚpure-render£¬ÈôÊÇes5д·¨£¬¿ÉÒÔÓÃʹmixin£»ÈôÊÇes6/es7д·¨£¬ÐèҪʹÓÃdecorator£¬ÔÚjsµÄbabel loaderÀïÃæ£¬ÐÂÔöplugins: [¡®transform-decorators-legacy¡¯]¡£Æäes6µÄд·¨ÊÇ£º

[@pureRender](/user/name/pureRender)
export default class List extends Component { ... }

Immutablejs´øÀ´µÄһЩÎÊÌâ

²»ÖØÐÂäÖȾ

Äã¿ÉÄÜ»áÏëµ½ImmutableÄܼõÉÙÎÞνµÄÖØÐÂäÖȾ£¬µ«¿ÉÄÜûÏë¹ý»áµ¼ÖÂÒ³Ãæ²»ÄÜÕýÈ·µØÖØÐÂäÖȾ¡£Ä¿Ç°ÁбíÒ³ÔÚÀÏʦ½øÈëµÄʱºòÊÇÓÐ2¸ötabµÄ£¬tabµÄÇл»»áÈÃÁбíÒ²Çл»¡£Ä¿Ç°ÊÖQµÄÁбíҳѧϰPCµÄÁбíÒ³£¬Á½¸öÁÐ±í¹²ÓÃÒ»Ì×dom½á¹¹£¨ÒòΪ³ýÁË×÷Òµ²¼ÖÃÕßÃû×ÖÖ®Í⣬Á½¸öÁбíһģһÑù£©¡£ÉÏÁËImmutablejsÖ®ºó£¬µ±ÅöÇÉ¡°ÎÒ·¢²¼µÄ¡°ÁбíºÍ¡±È«²¿¡°ÁÐ±í¿ªÍ·µÄ¼¸¸ö×÷Òµ¶¼ÊÇͬһ¸öÈ˲¼ÖõÄʱºò£¬ÁбíÇл»¾Í²»ÖØÐÂäÖȾÁË¡£

ÒýÈëimmutableºÍpureRenderºó£¬renderÀïµÄJSX×¢ÒâÒ»¶¨²»ÒªÓÐͬÑùµÄkey£¨ÈçÁ½¸öÁÐ±í£¬ÓÐÖØ¸´µÄÊý¾Ý£¬´ËʱÒÔÊý¾ÝidÀ´×÷Ϊkey¾Í²»Ì«ºÏÊÊ£¬Ó¦¸ÃÒªÓÃÊý¾Ýid + ÁбíÀàÐÍ×÷Ϊkey£©£¬»áÔì³É²»äÖȾÐÂÊý¾ÝÇé¿ö¡£ÁбíҳĿǰµÄ´¦Àí°ì·¨Êǽ«keyÖµ»»³Éid + listType¡£

(ÁбíÒ³Á½¸öÁбíµÄÇл»)

ÕâÑùд³ýÁ˱£Ö¤ÔÚ¸¸ÔªËØÄÇÒ»²ãÖªÏþÊý¾Ý(keyÖµ£©²»Í¬ÐèÒªÖØÐÂäÖȾ֮Í⣬Ҳ±£Ö¤ÁËReactµ×²ãäÖȾ֪µÀÕâÊÇÁ½×鲻ͬµÄÊý¾Ý¡£ÔÚReactÔ´ÎļþÀïÓÐÒ»¸öReactChildReconciler.jsÖ÷ÒªÊÇдchildrenµÄäÖȾÂß¼­¡£ÆäÖеÄupdateChildrenÀïÃæÓоßÌåÈçºÎ±È½Ïǰºóchildren£¬È»ºóÔÙ¾ö¶¨ÊÇ·ñÒªÖØÐÂäÖȾ¡£ÔڱȽϵÄʱºòËüµ÷ÓÃÁËshouldUpdateReactComponent·½·¨¡£ÎÒÃÇ¿´µ½ËüÓжÔkeyÖµ×ö±È½Ï¡£ÔÚÁ½¸öÁбíÖÐÓв»Í¬µÄkey£¬ÔÚÊý¾ÝÏàËÆµÄÇé¿öÏ£¬Äܱ£Ö¤Á½ÕßÇл»µÄʱºòÄÜÖØÐÂäÖȾ¡£

function shouldUpdateReactComponent

(prevElement, nextElement) {
var prevEmpty = prevElement === null ||

prevElement === false;
var nextEmpty = nextElement === null ||

nextElement === false;
if (prevEmpty || nextEmpty) {
return prevEmpty === nextEmpty;
}

var prevType = typeof prevElement;
var nextType = typeof nextElement;
if (prevType === 'string' || prevType ===

'number') {
return nextType === 'string' || nextType ===

'number';
} else {
return nextType === 'object' && prevElement.

type === nextElement.type && prevElement

.key === nextElement.key;
}
}

ÉÏÎÄÒ²Ìáµ½Immutablejs±àÒëºóµÄ°üÒ²ÓÐ50kb¡£¶ÔÓÚPC¶ËÀ´Ëµ¿ÉÄÜÎÞËùν£¬ÍøËÙ×ã¹»¿ì£¬µ«¶ÔÓÚÒÆ¶¯¶ËÀ´ËµÑ¹Á¦¾Í´óÁË¡£ÓÐÈËдÁ˸öseamless-immutable£¬ËãÊǼòÒ×°æµÄImmutablejs£¬Ö»ÓÐ2kb£¬Ö»Ö§³ÖObjectºÍArray¡£

µ«ÆäʵÊý¾Ý±È½ÏÂß¼­Ð´ÆðÀ´Ò²²¢²»ÄÑ£¬Òò´ËÔÙÈ¥review´úÂëµÄʱºò£¬ÎÒ¾ö¶¨³¢ÊÔ×Ô¼ºÐ´Ò»¸ö£¬Ò²ÊÇÕâ¸ö¾ö¶¨ÈÃÎÒ·¢ÏÖÁ˸ü¶àµÄ°ÂÃØ¡£

Õë¶ÔReactµÄÕâ¸öÊý¾Ý±È½ÏµÄÉî±È½ÏdeepCompare£¬ÒªµãÓÐ2¸ö£º

¾¡Á¿Ê¹´«ÈëµÄÊý¾Ý±âƽ»¯Ò»µã

±È½ÏµÄʱºò×öһЩÏÞÖÆ£¬±ÜÃâÒç³öÕ»

ÏÈÉÏÒ»ÏÂÁбíÒ³µÄ´úÂ룬ÈçÏÂͼ¡£ÕâÀﵱʱÊÇѧϰÁËPC¼ÒУȺµÄ×ö·¨£¬½«component×÷Ϊprops´«Èë¡£ÕâÀïµÄ<Scroll>·â×°µÄÊǹö¶¯¼ì²âµÄÂß¼­£¬¶ø<List>ÔòÊÇÁбíÒ³µÄäÖȾ£¬<Empty>ÊÇÁбíΪ¿ÕµÄʱºòչʾµÄÄÚÈÝ£¬<Loading>ÊÇÁбíµ×²¿¼ÓÔØµÄÏÔʾºáÌõ¡£

Õë¶ÔdeepCompareµÄµÚ1¸öÒªµã£¬±âƽ»¯Êý¾Ý£¬ÎÒÃǺÜÃ÷ÏÔ¾ÍÄܶ¨Î»³öÆäÖÐÒ»¸öÎÊÌâÁË¡£ÀýÈç<Empty>£¬ÎÒÃÇ´«ÈëÁËprops.hw£¬Õâ¸öprops°üÀ¨ÁËÁ½¸öÁбíµÄÊý¾Ý¡£µ«ÕâÑùµÄ½á¹¹¾Í»áÊÇÕâÑù

props.hw = {
listMine: [
{...}, {...}, ...
],
listAll: [
{...}, {...}, ...
],
}

µ«Èç¹ûÎÒÃÇÌáǰÔÚ´«Èë֮ǰÅжϵ±Ç°ÔÚÄĸöÁÐ±í£¬È»ºó´«Èë¶ÔÓ¦ÁбíµÄÊýÁ¿£¬Ôò»áÏñÕâÑù£º

props.hw = 20;

Á½Õß±È½ÏÆðÀ´£¬ÏÔʾÊǺóÕß¼òµ¥µÃ¶à¡£

Õë¶ÔdeepCompareµÚ2µã£¬ÏÞÖÆ±È½ÏµÄÌõ¼þ¡£Ê×ÏÈÈÃÎÒÃÇÏëµ½µÄÊDZȽϵÄÉî¶È¡£Ò»°ã¶øÑÔ£¬¶ÔÓÚObjectºÍArrayÊý¾Ý£¬ÎÒÃǶ¼ÐèÒªµÝ¹éÈ¥½øÐбȽϣ¬³öÓÚÐÔÄܵĿ¼ÂÇ£¬ÎÒÃǶ¼»áÏÞÖÆ±È½ÏµÄÉî¶È¡£

³ý´ËÖ®Í⣬ÎÒÃǻعËÒ»ÏÂÉÏÃæµÄ´úÂ룬ÎÒÃǽ«¼¸¸öReact component×÷Ϊprops´«½øÈ¥ÁË£¬Õâ»áÔÚshouldComponentUpdateÀïÃæÏÔʾ³öÀ´¡£ÕâЩcomponentµÄ½á¹¹´ó¸ÅÈçÏ£º

<table width="60%" border="0" align="center"

cellpadding="7" cellspacing="1" bgcolor="#CCCCCC"

class="content">
<tr >
<td height="25" bgcolor="#f5f5f5" id="dai">
<p style="text-indent: 0em;">Hello World

!</p></td>
</tr>
</table>

Òò´Ë£¬Õë¶ÔcomponentµÄ±È½Ï£¬ÓÐһЩÊÇ¿ÉÒÔºöÂԵģ¬ÀýÈç$$typeof, _store, _self, _source, _owner¡£typeÕâ¸ö±È½Ï¸´ÔÓ£¬¿ÉÒԱȽϣ¬µ«½öÏÞÓÚÎÒÃǶ¨ºÃµÄ±È½ÏÉî¶È¡£Èç¹û²»×öÕâЩºöÂÔ£¬Õâ¸öÉî±È½Ï½«»á±È½ÏÏûºÄÐÔÄÜ¡£¹ØÓÚÕâ¸ödeepCompareµÄ´úÂ룬ÎÒ·ÅÔÚÁËpure-render-deepCompare-decorator¡£

²»¹ýÆäʵ£¬½«componentµ±×÷props´«Èë¸üΪÁé»î£¬¶øÇÒÄܹ»Ôö¼Ó×é¼þµÄ¸´ÓÃÐÔ£¬µ«´ÓÉÏÃæ¿´À´£¬ÊDZȽÏÏûºÄÐÔÄܵġ£¿´Á˹ٷ½ÎĵµÖ®ºó£¬ÎÒÃdz¢ÊÔ»»ÖÖд·¨£¬Ö÷Òª¾ÍÊDzÉÓÃ<Scroll>°ü¹ü<List>µÄ×ö·¨£¬È»ºóÓÃthis.props.childrenÔÚ<Scroll>ÀïÃæäÖȾ£¬²¢½«<Empty>, <Loading>³é³öÀ´¡£

±¾ÒÔΪReact¿ÉÄÜ»á¶ÔchildrenÕâ¸öpropsÓÐÊ²Ã´ÌØÊâ´¦Àí£¬µ«ËüÒÀÈ»Êǽ«childrenµ±×÷props£¬´«ÈëshouldComponentUpdate£¬Õâ¾ÍÆÈʹ¸¸ÔªËØ<Scroll>ҪȥÅжÏÊÇ·ñÒªÖØÐÂäÖȾ£¬½ø¶øÌøµ½×ÓÎÞËØ<List>ÔÙÈ¥ÅжÏÊÇ·ñ½øÒ»²½½øÐÐäÖȾ¡£

ÄÇ<Scroll>¾¿¾¹Òª²»ÒªÈ¥×öÕâÖØÅжÏÄØ£¿Õë¶ÔÁбíÒ³ÕâÖÖÇé¿ö£¬ÎÒÃǾõµÃ¿ÉÒÔÔÝʱ²»×ö£¬ÓÉÓÚ<Scroll>°ü¹üµÄÔªËØ²»¶à£¬<Scroll>¿ÉÒÔÏÈÖØ¸´äÖȾ£¬È»ºóÔÙ½»ÓÉ×ÓÔªËØ<List>×Ô¼ºÔÙÈ¥Åжϡ£ÕâÑùÎÒÃǶÔpure-render-deepCompare-decoratorÒª½øÐÐһЩÐ޸쬵±ÂÖµ½props.childrenÅжϵÄʱºò£¬ÎÒÃÇÒªÇó¸¸ÔªËØÖ±½ÓÖØÐÂäÖȾ£¬ÕâÑù¾ÍÄܽ»¸ø×ÓÔªËØÈ¥×öÏÂÒ»²½µÄ´¦Àí¡£

Èç¹û<Scroll>°ü¹üµÄÖ»ÓÐ<List>»¹ºÃ£¬Èç¹û»¹ÓÐÏñ<Empty>, <Loading>ÉõÖÁÆäËü¸ü¶àµÄ×ÓÔªËØ£¬ÄÇ<Scroll>ÖØÐÂäÖȾ»á´¥·¢ÆäËü×ÓÔªËØÈ¥ÔËË㣬ÅжÏ×Ô¼ºÊÇ·ñÒª×öÖØÐÂäÖȾ£¬Õâ¾ÍÔì³ÉÁËÀË·Ñ¡£reactµÄ¹Ù·½ÂÛ̳ÉÏÒѾ­ÓÐÈËÌá³ö£¬ReactµÄ½«¸¸×ÓÔªËØµÄÖØ¸´äÖȾµÄ¾ö²ß¶¼·ÅÔÚshouldComponentUpdate£¬¿ÉÄܵ¼ÖÂÁËñîºÏShouldcomponentupdate And Children¡£

lodash.merge¿ÉÒÔ½â¾ö´ó²¿·Ý³¡¾°

ÓÉÓÚimmutableµÄ´óСÎÊÌâÒ»Ö±ÝÓÈÆÍ·ÉÏ£¬¾Ã¾Ã²»µÃɢȥ£¬Òò´ËÔÙÈ¥ÕÒѰÆäËüµÄ·½°¸¡£ºóÃæ¾ö¶¨³¢ÊÔÒ»ÏÂlodash.merge£¬²¢ÓÃÉÏ֮ǰ×Ô¼ºÐ´µÄpureRender¡£ÔÚäÖȾÐÔÄÜÉÏ»¹¿ÉÒÔ½ÓÊÜ£¬ÔÚ½ö±Èimmutable²îÒ»µãµã£¨ºóÃæ»áÅû¶¾ßÌåÊý¾Ý£©£¬µ«È´´øÀ´ÁË30kbµÄ¼õ°ü¡£

ÐÔÄÜÓÅ»¯Ð¡Tips

ÕâÀï¹éÄÉÁËһЩÆäËüÐÔÄÜÓÅ»¯µÄСTips

ÇëÉ÷ÓÃsetState£¬ÒòÆäÈÝÒ×µ¼ÖÂÖØÐÂäÖȾ

¼ÈÈ»½«Êý¾ÝÖ÷Òª½»¸øÁËReduxÀ´¹ÜÀí£¬ÄǾ;¡Á¿Ê¹ÓÃRedux¹ÜÀíÄãµÄÊý¾ÝºÍ״̬state£¬³ýÁËÉÙÊýÇé¿öÍ⣬±ðÍüÁËshouldComponentUpdateÒ²ÐèÒª±È½Ïstate¡£

Ç뽫·½·¨µÄbindÒ»ÂÉÖÃÓÚconstructor

ComponentµÄrenderÀï²»¶¯Ì¬bind·½·¨£¬·½·¨¶¼ÔÚconstructorÀïbindºÃ£¬Èç¹ûÒª¶¯Ì¬´«²Î£¬·½·¨¿ÉʹÓñհü·µ»ØÒ»¸ö×îÖÕ¿ÉÖ´Ðк¯Êý¡£È磺showDelBtn(item) { return (e) => {}; }¡£Èç¹ûÿ´Î¶¼ÔÚrenderÀïÃæµÄjsxÈ¥bindÕâ¸ö·½·¨£¬Ã¿´Î¶¼Òª°ó¶¨»áÏûºÄÐÔÄÜ¡£

ÇëÖ»´«µÝcomponentÐèÒªµÄprops

´«µÃÌ«¶à£¬»òÕß²ã´Î´«µÃÌ«É¶¼»á¼ÓÖØshouldComponentUpdateÀïÃæµÄÊý¾Ý±È½Ï¸ºµ££¬Òò´Ë£¬Ò²ÇëÉ÷ÓÃspread attributes£¨£©¡£

Ç뾡Á¿Ê¹ÓÃconst element

Õâ¸öÓ÷¨Êǹ¤Òµ¾ÛÔÚReactÌÖÂÛ΢ÐÅȺÀï½Ì»áµÄ£¬ÎÒÃÇ¿ÉÒÔ½«²»Ôõô±ä¶¯£¬»òÕß²»ÐèÒª´«Èë״̬µÄcomponentд³Éconst elementµÄÐÎʽ£¬ÕâÑùÄܼӿìÕâ¸öelementµÄ³õʼäÖȾËÙ¶È¡£

·ÓÉ¿ØÖÆÓë²ð°ü

µ±ÏîÄ¿±äµÃ¸ü´ó¹æÄ£Ó븴ÔÓµÄʱºò£¬ÎÒÃÇÐèÒªÉè¼Æ³ÉSPA£¬Õâʱ·ÓɹÜÀí¾Í·Ç³£ÖØÒªÁË£¬ÕâÊ¹ÌØ¶¨url²ÎÊýÄܹ»¶ÔÓ¦Ò»¸öÒ³Ãæ¡£

PC¼ÒУȺÕû¸öÉè¼ÆÊÇÒ»¸öÖÐÐ͵ÄSPA£¬µ±js bundleÌ«´óµÄʱºò£¬ÐèÒª²ð·Ö³É¼¸¸öСµÄbundle£¬½øÐÐÒì²½¼ÓÔØ¡£Õâʱ¿ÉÒÔÓõ½webpackµÄÒì²½¼ÓÔØ´ò°ü¹¦ÄÜ£¬require¡£

ÔÚÖØ¹¹ÊÖQ¼ÒУȺ²¼ÖÃÒ³µÄʱºò£¬ÎÒÃÇÓв»Éٵĸ¡²ã£¬ÁбíÓв¼ÖÃÒ³ÄÚÈÝÖ÷¸¡²ã¡¢Í¬²½µ½¶àȺ¸¡²ã¡¢¿ÆÄ¿¹ÜÀí¸¡²ãÒÔ¼°Ö¸¶¨Èº³ÉÔ±¸¡²ã¡£ÕâЩÍêÈ«¿ÉÒÔʹÓÃreact-router½øÐйÜÀí¡£µ«ÊÇÓÉÓÚµ±Ê±Ò»ÔçʹÓÃÁËImmutablejs£¬js bundleÒѾ­±È½Ï´ó£¬ÎÒÃǾͲ»´òËãʹÓÃreact-routerÁË¡£µ«ºóÃæÈÔÈ»·¢ÏÖ°ü±ÈÖØ¹¹Ç°Òª´óһЩ£¬Òò´ËΪÁ˱£Ö¤ÊׯÁʱ¼ä²»ÂýÓÚÖØ¹¹Ç°£¬ÎÒÃÇÏ£ÍûÔÚ²»ÓÃreact-routerµÄÇé¿öϽøÐзְü£¬ÆäʵҲ²¢²»ÄÑ£¬ÈçÏÂÃæ2·ùͼ£º

Ê×ÏÈÔÚÇл»¸¡²ã·½·¨ÀïÃæ£¬Ê¹ÓÃrequire.ensure£¬Ö¸¶¨Òª¼ÓÔØÄĸö°ü¡£

ÔÚsetComponent·½·¨À½«component´æÔÚstateÀïÃæ¡£

ÔÚ¸¸ÔªËصÄäÖȾ·½·¨Àµ±stateÓÐÖµµÄʱºò£¬¾Í»á×Ô¶¯äÖȾ¼ÓÔØ»ØÀ´µÄcomponent¡£

ÐÔÄÜÊý¾Ý

ÊׯÁ¿É½»»¥Ê±¼ä

ĿǰֻÓÐÁбíÒ³·¢²¼ÍâÍøÁË£¬ÎÒÃDZȽÏÁËÓÅ»¯Ç°ºóµÄÊׯÁ¿É½»»¥Ê±¼ä£¬·Ö±ðÓÐ18%ºÍ5.3%µÄÌáÉý¡£

äÖȾFPS

Android

ReactÖØ¹¹ºóµÚÒ»°æ£¬µ±Ê±»¹Ã»×öÈκεÄÓÅ»¯£¬·¢ÏÖÆ½¾ùFPSÖ»ÓÐ22£¨ËäÈ»AndroidµÄÈâÑÛ¸ÐÊܲ»³öÀ´£©£¬¶øºóÃæÊ¹ÓÃImmutable»òÕßLodash.merge¶¼·Ç³£½Ó½ü£¬ÄÜ´ïµ½42»òÒÔÉÏ¡£¶øÊÖ»úQQ¿É½ÓÊܵÄFPS×îÉÙÖµÊÇ30FPS¡£Òò´ËʹÓÃImmutableºÍLodash.mergeµÄÓÅ»¯»¹ÊÇÏ൱Ã÷ÏԵġ£

ÖØ¹¹ºóµÚÒ»°æ

Immutable

Lodash.merge

iOS

ÔÚiOSÉϵÄfps²î¾àÓÈΪÃ÷ÏÔ¡£Öع¹ºóµÚÒ»°æ£¬À­ÁË´ó¸Å5ÆÁÖ®ºó£¬ÈâÑÛ»áÓп¨¶ÙµÄ¸Ð¾õ£¬À­µ½ÁË10ÆÁÖ®ºó£¬Êý¾Ý¿ªÊ¼µôµ½ÁË20¶à30¡£¶øImmutableºÍLodash.mergeÔò´ó²¿·Ýʱ¼ä±£³ÖÔÚ50fpsÒÔÉÏ£¬ºÜ¶àʱºò»¹ÄÜ´ïµ½·Ç³£Á÷³©µÄ60fps¡£

ÖØ¹¹ºóµÚÒ»°æ

Immutable

Lodash.merge

ChromeÄ£ÄâÆ÷

ÓÃChromeÄ£ÄâÆ÷Ò²ÄÜ¿´³öһЩ¶ËÄß¡£ÔÚScripting·½Ã棬ImmutableºÍLodash.mergeµÄºÄʱÊÇ×îÉٵģ¬Ô¼700¶àms£¬¶øÖع¹ºóµÄµÚÒ»°æÔòÐèÒª1220ms¡£Lodash.mergeÔÚrenderingºÍpaintingÉÏÔòûռµ½ÓÅÊÆ£¬µ«ImmutableÔòÒª±ÈÆäËüÁ½¸öÒªÉÙ30% - 40%¡£ÓÉÓÚ²âÊÔµÄʱºòÊÇÔÚPC¶Ë£¬PC¶ËµÄÐÔÄÜÓÖ¼«ºÃ£¬ËùÒÔ²»¹ÜÊÇÈâÑÛ£¬»¹ÊÇÊý¾Ý£¬¶ÔÓÚ²»ÊǺܸ´ÔÓµÄÐèÇó£¬×ÜÌåµÄäÖȾÐÔÄÜ¿´²»³ö·Ç³£Ã÷ÏԵIJî¾à¡£

ÖØ¹¹ºóµÚÒ»°æ

Immutable

Lodash.merge

´ÓÉÏÃæµÄÊý¾Ý¿´À´£¬ÔÚÒÆ¶¯¶ËʹÓÃImmutableºÍLodash.mergeÏà¶ÔÓÚ²»Ó㬻áÓнϴóµÄÐÔÄÜÓÅÊÆ£¬µ«ImmutableÏà¶ÔÓÚLodash.mergeÔÚÎÒÃÇÐèÇóÇé¾°ÏÂÔÝʱû¿´³öÃ÷ÏÔµÄÓÅÊÆ£¬±ÊÕß¹À¼Æ¿ÉÄÜÊÇÓÉÓÚÏîÄ¿Êý¾Ý¹æÄ£²»´ó£¬½á¹¹²»¸´ÔÓ£¬Òò´ËImmutableµÄËã·¨ÓÅÊÆ²¢Ã»Óгä·Ö·¢»Ó³öÀ´¡£

²âÊÔ×¢Ã÷

Android¶Ë²âÊÔFPSÊÇʹÓÃÁËÌÚѶ¿ª·¢µÄGTËæÉíµ÷¡£¶øiOSÔòʹÓÃÁËMacbookÀïxCode×Ô´øµÄinstrumentÖеÄanimation¹¦ÄÜ¡£ChromeÄ£ÄâÆ÷ÔòʹÓÃÁËChromeµÄtimeline¡£²âÊԵķ½Ê½ÊÇÔÈËÙ¹ö¶¯ÁÐ±í£¬À­³öÊý¾Ý½øÐÐäÖȾ¡£

ReactÐÔÄÜÓÅ»¯¾ü¹æ

ÎÒÃÇÔÚ¿ª·¢µÄ¹ý³ÌÖУ¬½«ÉÏÃæËùÂÛÊöµÄÄÚÈÝ£¬×ܽá³ÉÒ»¸ö»ù±¾µÄ¾ü¹æ£¬Ãú¼ÇÓÚÐÄ£¬¾Í¿ÉÒÔ±£Ö¤ReactÓ¦ÓõÄÐÔÄܲ»ÖÁÓÚÌ«²î¡£

äÖȾÏà¹Ø

1.ÌáÉý¼¶ÏîÄ¿ÐÔÄÜ£¬ÇëʹÓÃimmutable(props¡¢state¡¢store)

2.Çëpure-render-decoratorÓëimmutablejs´îÅäʹÓÃ

3.ÇëÉ÷ÓÃsetState£¬ÒòÆäÈÝÒ×µ¼ÖÂÖØÐÂäÖȾ

4.½÷É÷½«componentµ±×÷props´«Èë

5.Ç뽫·½·¨µÄbindÒ»ÂÉÖÃÓÚconstructor

6.ÇëÖ»´«µÝcomponentÐèÒªµÄprops£¬±ÜÃâÆäËüprops±ä»¯µ¼ÖÂÖØÐÂäÖȾ- - £¨É÷ÓÃspread attributes£©

7.ÇëÔÚÄãÏ£Íû·¢ÉúÖØÐÂäÖȾµÄdomÉÏÉèÖÿɱ»reactʶ±ðµÄͬ¼¶Î¨Ò»key£¬·ñÔòreactÔÚijЩÇé¿ö¿ÉÄܲ»»áÖØÐÂäÖȾ¡£

8.Ç뾡Á¿Ê¹ÓÃconst element

tapʼþ

¼òµ¥µÄtapʼþ£¬ÇëʹÓÃreact-tap-event-plugin ¿ª·¢»·¾³Ê±£¬×îºÃÒýÈëwebpackµÄ»·¾³±äÁ¿£¨½öÔÚ¿ª·¢»·¾³Öгõʼ»¯£©£¬ÔÚcontainerÖгõʼ»¯¡£Éú²ú»·¾³µÄʱºò£¬Ç뽫plugin¸úreact´ò°üµ½Ò»Æð£¨ÐèÒª´ò°üÔÚÒ»Æð²ÅÄÜÕý³£Ê¹Óã¬ÒòΪplugin¶ÔreactÓкöàÒÀÀµ£©£¬ÍâÁ´ÒýÈë¡£

Ŀǰ²Î¿¼ÁËÕâ¸öÏîÄ¿µÄ´ò°ü·½°¸£º

https://github.com/hartmamt/react-with-tap-events
Facebook¹Ù·½issue: https://github.com/

facebook/react/blo

b/bef45b0b1a98ea9b472ba664d955a039cf2f806

8/src/renderers/dom/client/eventPlugins/

TapEventPlugin.js
React-tap-event-plugin github:
https://github.com/zilverline/react-tap-event-plugin

¸´ÔÓµÄtapʼþ£¬½¨ÒéʹÓÃtap component ¼ÒУȺÁбíÒ³µÄÿ¸ö×÷ÒµµÄtap½»»¥¶¼±È½Ï¸´ÔÓ£¬³öÁËÆÕͨµÄtapÖ®Í⣬»¹ÐèÒªlong tapºÍswipe¡£Òò´ËÎÒÃÇÖ»ºÃ×Ô¼º·â×°ÁËÒ»¸ötap component

DebugÏà¹Ø

1.ÒÆ¶¯¶ËÇëÉ÷ÓÃredux-devtools£¬Ò×Ôì³É¿¨¶Ù

2.WebpackÉ÷ÓÃdevtoolsµÄinline-source-mapģʽ ʹÓôËģʽ»áÄÚÁªÒ»´ó¶Î±ãÓÚ¶¨Î»bugµÄ×Ö·û´®£¬²é´íʱ¿ÉÒÔ¿ªÆô£¬²»ÊDzé´íʱ½¨Ò鹨±Õ£¬·ñÔò¿ª·¢Ê±¼ÓÔØµÄ°ü»á·Ç³£´ó¡£

ÆäËü

1.É÷ÓÃ̫еÄes6Óï·¨¡£ Object.assignµÈ½ÏеÄÀà¿â±ÜÃâÔÚÒÆ¶¯¶ËÉÏʹÓ㬻ᱨ´í¡£ Object.assignĿǰʹÓÃobject-assign°ü¡£»òÕßʹÓÃbabel-plugin-transform-object-assign²å¼þ¡£»áת»»³ÉÒ»¸öextendsµÄº¯Êý£º

var _extends = ...;
_extends(a, b);

2.×¢ÒâObject.assignÊÇdz¿½±´ Object.assignÊÇdz¿½±´£¬ÈôÊý¾Ý½á¹¹²ã´Î½ÏÉîµÄʱºò»á¿½±´Ê§°Ü£¬Ö±½Ó»Ø´«Ô­±¾µÄobject reference£¬´Ë´¦ÍƼölodash.merge¡£

   
3097 ´Îä¯ÀÀ       32
Ïà¹ØÎÄÕÂ

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

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

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì