×Ô2013ÄêFacebook·¢²¼ÒÔÀ´£¬ReactÎüÒýÁËÔ½À´Ô½¶àµÄ¿ª·¢Õߣ¬»ùÓÚËüµÄÑÜÉú¼¼Êõ£¬ÈçReact
Native¡¢React CanvasµÈÒ²²ã³ö²»Çî¡£InfoQ¾«ÐIJ߻®¡°ÉîÈëdz³öReact¡±ÏµÁÐÎÄÕ£¬Îª¶ÁÕ߯ÊÎöReact¿ª·¢µÄ¼¼Êõϸ½Ú¡£
React×î³õÀ´×ÔFacebookÄÚ²¿µÄ¹ã¸æÏµÍ³ÏîÄ¿£¬ÏîĿʵʩ¹ý³ÌÖÐǰ¶Ë¿ª·¢Óöµ½Á˾޴óÌôÕ½£¬´úÂë±äµÃÔ½À´Ô½Ó·Ö×ÇÒ»ìÂÒ²»¿°£¬ÄÑÒÔά»¤¡£ÓÚÊÇÍ´¶¨Ë¼Í´£¬ËûÃǾö¶¨Å׿ªºÜ¶àËùνµÄ¡°×î¼Ñʵ¼ù¡±£¬ÖØÐÂ˼¿¼Ç°¶Ë½çÃæµÄ¹¹½¨·½Ê½£¬ÓÚÊǾÍÓÐÁËReact¡£
React´øÀ´Á˺ܶ࿪´´ÐÔµÄ˼·À´¹¹½¨Ç°¶Ë½çÃæ£¬ËäȻѡÔñReactµÄ×îÖØÒªÔÒòÖ®Ò»ÊÇÐÔÄÜ£¬µ«ÊÇÏà¹Ø¼¼Êõ±³ºóµÄÉè¼ÆË¼Ïë¸üÖµµÃÎÒÃÇȥ˼¿¼¡£Ö®Ç°ÎÒÒ²ÔøÐ´¹ýһƪReactµÄÈëÃÅÎÄÕ£¬²¢ÌṩÁËʾÀý´úÂ룬´ó¼Ò¿ÉÒÔ½áºÏ²Î¿¼¡£
ÉϸöÔÂReact·¢²¼ÁË×îеÄ0.13°æ£¬²¢ÌṩÁ˶ÔES6µÄÖ§³Ö¡£ÔÚа汾ÖУ¬Ò»¸öССµÄ¸Ä±äÊÇReactÈ¡ÏûÁ˺¯ÊýµÄ×Ô¶¯°ó¶¨£¬Ò²¾ÍÊÇ˵£¬ÒÔǰ¿ÉÒÔÕâÑùÈ¥°ó¶¨Ò»¸öʼþ£º
<button onClick={this.handleSubmit}>Submit</button> |
¶øÔÚÒÔES6Óï·¨¶¨ÒåµÄ×é¼þÖУ¬±ØÐëдΪ£º
<button onClick={this.handleSubmit.bind(this)}>Submit</button> |
Á˽âǰ¶Ë¿ª·¢ºÍJavaScriptµÄͬѧ¶¼ÖªµÀ£¬×öʼþ°ó¶¨Ê±ÎÒÃÇÐèҪͨ¹ýbind£¨»òÀàËÆº¯Êý£©À´ÊµÏÖÒ»¸ö±Õ°üÒÔÈÃʼþ´¦Àíº¯Êý×Ô´øÉÏÏÂÎÄÐÅÏ¢£¬ÕâÊÇÓÉJavaScriptÓïÑÔÌØÐÔ¾ö¶¨µÄ¡£¶øÔÚ0.13°æ±¾Ö®Ç°£¬React»á×Ô¶¯ÔÚ³õʼ»¯Ê±¶Ô×é¼þµÄÿһ¸ö·½·¨×öÒ»´ÎÕâÑùµÄ°ó¶¨£¬ÀàËÆÓÚthis.func
= this.func.bind(this)£¬ÕâÑùÔÚJSXµÄʼþ°ó¶¨ÖоͿÉÒÔÖ±½ÓдΪonClick={this.handleSubmit}¡£
±íÃæÉÏ¿´×Ô¶¯°ó¶¨¸ø¿ª·¢´øÀ´Á˱ãÀû£¬¶øFacebookÈ´ÈÏΪÕâÆÆ»µÁËJavaScriptµÄÓïÑÔϰ¹ß£¬Æä±³ºóµÄÉñÆæ£¨Magic£©Âß¼»òÐí»á¸ø³õѧÕß´øÀ´À§»ó£¬ÉõÖÁ¿ª·¢ÕßÈç¹û´ÓReactÔÙתµ½ÆäËü¿âÒ²¿ÉÄÜ»áÎÞËùÊÊ´Ó¡£»ùÓÚͬÑùµÄÀíÓÉ£¬React»¹È¡ÏûÁ˶ÔmixinµÄÖ§³Ö£¬»ùÓÚES6µÄReact×é¼þ²»ÔÙÄܹ»ÒÔmixinµÄÐÎʽ½øÐдúÂ븴ÓûòÕßÀ©Õ¹¡£¾¡¹ÜÕâ´øÀ´Á˺ܴ󲻱㣬µ«FacebookÈÏΪmixinÔö¼ÓÁË´úÂëµÄ²»¿ÉÔ¤²âÐÔ£¬ÎÞ·¨Ö±¹ÛµÄÈ¥Àí½â¡£¹ØÓÚmixinµÄ˼¿¼£¬»¹¿ÉÒԲο¼ÕâÆªÎÄÕ¡£
ÒÔ¼òµ¥Ö±¹Û¡¢·ûºÏϰ¹ßµÄ£¨idiomatic£©·½Ê½È¥±à³Ì£¬ÈôúÂë¸üÈÝÒ×±»Àí½â£¬´Ó¶øÒ×ÓÚά»¤ºÍ²»¶ÏÑݽø¡£ÕâÕýÊÇReactµÄÉè¼ÆÕÜѧ¡£
±àд¿ÉÔ¤²â£¬·ûºÏϰ¹ßµÄ´úÂëËùν¿ÉÔ¤²â£¨predictable£©£¬¼´ÈÝÒ×Àí½âµÄ´úÂë¡£ÔÚÄê³õµÄReact¿ª·¢Õß´ó»áÉÏ£¬ReactÏîÄ¿¾ÀíTom
Occhino½øÒ»²½²ûÊöReactµ®ÉúµÄ³õÖÔ£¬ÔÚÑݽ²ÖÐÌáµ½£¬React×î´óµÄ¼ÛÖµ¾¿¾¹ÊÇʲô£¿ÊǸßÐÔÄÜÐéÄâDOM¡¢·þÎñÆ÷¶ËRender¡¢·â×°¹ýµÄʼþ»úÖÆ¡¢»¹ÊÇÍêÉÆµÄ´íÎóÌáʾÐÅÏ¢£¿¾¡¹Üÿһµã¶¼×ãÒÔÖØÒª¡£µ«ËûÖ¸³ö£¬ÆäʵReact×îÓмÛÖµµÄÊÇÉùÃ÷ʽµÄ£¬Ö±¹ÛµÄ±à³Ì·½Ê½¡£
Èí¼þ¹¤³ÌÏòÀ´²»ÌᳫÓøßÉîβâµÄ¼¼ÇÉÈ¥±à³Ì£¬Ïà·´£¬ÈçºÎд³ö¿ÉÀí½â¿Éά»¤µÄ´úÂë²ÅÊÇÖÊÁ¿ºÍЧÂʵĹؼü¡£ÊÔÏ룬һ¸öÔÂÖ®ºóÄã»ØÍ·¿´ÄãдµÄ´úÂ룬ÊÇ·ñÒ»ÑÛ¾ÍÃ÷°×ij¸ö±äÁ¿£¬Ä³¸öifÅжϵĺ¬Ò壻һ¸öмÓÈëµÄͬÊÂÏëÈ¥Ôö¼ÓÒ»¸öССµÄй¦ÄÜ»òÊÇÐÞ¸´Ä³¸öBug£¬ËûÊÇ·ñ¶Ô×Ô¼ºµÄ´úÂëÓÐ×ã¹»µÄÐÅÐIJ»ÒýÈëÈκθ±×÷Óã¿Ëæ×ʦÄܵÄÔö¼Ó£¬´úÂëºÜÈÝÒ×±äµÃÔ½À´Ô½¸´ÔÓ£¬ÕâЩÎÊÌâÒ²½«Ô½À´Ô½ÑÏÖØ£¬×îÖÕµ¼ÖÂÒ»·ÝÄÑÒÔά»¤µÄ´úÂë¡£¶øReactºÅ³Æ£¬ÐÂͬÊÂÉõÖÁÔÚ¼ÓÈëµÄµÚÒ»Ìì¾ÍÄÜ¿ªÊ¼¿ª·¢Ð¹¦ÄÜ¡£
ÄÇôReactÊÇÈçºÎ×öµÄÄØ£¿
ʹÓÃJSXÖ±¹ÛµÄ¶¨ÒåÓû§½çÃæJSXÊÇReactµÄºËÐÄ×é³É²¿·Ö£¬ËüʹÓÃXML±ê¼ÇµÄ·½Ê½È¥Ö±½ÓÉùÃ÷½çÃæ£¬½çÃæ×é¼þÖ®¼ä¿ÉÒÔ»¥ÏàǶÌס£µ«ÊÇJSX¸øÈ˵ĵÚÒ»Ó¡ÏóÈ´ÊÇÏ൱¡°³óª¡±¡£µ±ÏÂÃæÕâÑùµÄÀý×Ó±»µÚÒ»´ÎչʾµÄʱºò£¬ÉõÖÁºÜ¶àÈ˳ÆÖ®Îª¡°¾Þ´óµÄÍ˲½£¨Huge
Step Backwards£©¡±£º
var React = require(¡®React¡¯); var message = <div class=¡°hello¡± onClick={someFunc}> <span>Hello World</span> </div>; React.renderComponent(message, document.body);
|
½«HTMLÖ±½ÓǶÈëµ½JavaScript´úÂëÖп´ÉÏȥȷʵÊÇÒ»¼þ×ã¹»·è¿ñµÄÊÂÇé¡£ÈËÃÇ»¨Á˶àÄêʱ¼ä×ܽá³öµÄ½çÃæºÍÒµÎñÂß¼Ï໥·ÖÀëµÄ¡°×î¼Ñʵ¼ù¡±¾ÍÕâô±»³¹µ×´òÆÆ¡£ÄÇôReactΪºÎÒªÈç´ËÁíÀࣿ
Ä£°å³öÏֵijõÖÔÊÇÈ÷ǿª·¢ÈËÔ±Ò²ÄܶԽçÃæ×öÒ»¶¨µÄÐ޸ġ£µ«Õâ¸ö³õÖÔÔÚµ±Ç°Web³ÌÐòÀïÒÑÍêÈ«²»ÊÊÓã¬Ã¿¸öÄ£°å±³ºóµÄ´úÂëÂß¼ÑÏÖØÒÀÀµÄ£°åÖеÄÄÚÈݺÍDOM½á¹¹£¬Á½ÕßÊǽôÃÜñîºÏµÄ¡£¼´Ê¹×öµ½ÎļþλÖõķÖÀ룬ʵ¼ÊÉÏÁ½Õß»¹ÊÇÒ»ÌåµÄ£¬²¢ÇÒΪÁËÁ½ÕßÖ®¼äµÄÐ×÷¶ø²»µÃ²»ÒýÈëºÜ¶à»úÖÆºÍ¸ÅÄî¡£ÒÔAngularjsµÄÊ×ҳʾÀý´úÂëΪÀý£º
<ul class="unstyled"> <li ng-repeat="todo in todoList.todos"> <input type="checkbox" ng-model="todo.done"> <span class="done-{{todo.done}}">{{todo.text}}</span> </li> </ul> |
¾¡¹ÜÎÒÃǺÜÈÝÒ׿´¶®ÕâһС¶ÎÄ£°åµÄº¬Ò壬µ«ÄãÈ´ÎÞ·¨¿ªÊ¼Ð´ÕâÑùµÄ´úÂ룬ÒòΪÄãÐèҪѧϰÕâÒ»ÕûÌ×Óï·¨¡£±ÈÈç˵£¬ÄãµÃÖªµÀÓÐng-repeatÕâÑùµÄ±ê¼ÇµÄ׼ȷº¬Ò壬ÆäÖеġ±todo
in todoList.todos¡±¿´ÉÏÈ¥ÊÇrepeatÓï·¨µÄÒ»²¿·Ö£¬»òÐí»¹ÓÐÆäËüÓï·¨´æÔÚ£»¿ÉÒÔ¿´µ½ÓÐ{{todo.text}}ÕâÑùµÄÊý¾Ý°ó¶¨£¬ÄÇôÈç¹ûÒª¶ÔÕâ¶ÎÎı¾¸ñʽ»¯£¨¼ÓÒ»¸öformatter£©¸ÃÔõô×ö£»ÁíÍ⣬ng-model±³ºóÓÖÐèҪʲôÑùµÄÊý¾Ý½á¹¹£¿
ÏÖÔÚÀ´¿´ReactÔõôдÕâ¶ÎÂß¼£º
//... render: function () { var lis = this.todoList.todos.map(function (todo) { return ( <li> <input type="checkbox" checked={todo.done}> <span className="done-{todo.done}">{todo.text}</span> </li>); }); return ( <ul class="unstyled"> {lis} </ul> ); } //... |
¿ÉÒÔ¿´µ½£¬JSXÖгýÁËÁíÀàµÄHTML±ê¼ÇÖ®Í⣬²¢Ã»ÓÐÒýÈëÆäËüÈκÎеĸÅÄÊÂʵÉÏHTML±ê¼ÇÒ²¿ÉÒÔÍêÈ«ÓÃJavaScriptȥд£©¡£AngularÖеÄrepeatÔÚÕâÀï±»Ò»¸ö¼òµ¥µÄÊý×é·½·¨mapËùÌæ´ú¡£ÔÚÕâÀïÄã¿ÉÒÔÀûÓÃÊìϤµÄJavaScriptÓ﷨ȥ¶¨Òå½çÃæ£¬ÔÚÄãµÄ˼ά¹ý³ÌÖÐÆäʵÒѾ²»ÐèÒª´æÔÚÄ£°åµÄ¸ÅÄÐèÒª¿¼ÂǵĽö½öÊÇÈçºÎÓôúÂë¹¹½¨Õû¸ö½çÃæ¡£ÕâÖÖ×ÔÈ»¶øÖ±¹ÛµÄ·½Ê½Ö±½Ó½µµÍÁËReactµÄѧϰÃż÷²¢ÇÒÈôúÂë¸üÈÝÒ×Àí½â¡£
¼ò»¯µÄ×é¼þÄ£ÐÍ£ºËùν×é¼þ£¬Æäʵ¾ÍÊÇ״̬»úÆ÷×é¼þ²¢²»ÊÇÒ»¸öеĸÅÄËüÒâζ×Åij¸ö¶ÀÁ¢¹¦ÄÜ»ò½çÃæµÄ·â×°£¬´ïµ½¸´ÓᢻòÊÇÒµÎñÂß¼·ÖÀëµÄÄ¿µÄ¡£¶øReactÈ´ÕâÑùÀí½â½çÃæ×é¼þ£º
Ëùν×é¼þ£¬¾ÍÊÇ״̬»úÆ÷
React½«Óû§½çÃæ¿´×ö¼òµ¥µÄ״̬»úÆ÷¡£µ±×é¼þ´¦ÓÚij¸ö״̬ʱ£¬ÄÇô¾ÍÊä³öÕâ¸ö״̬¶ÔÓ¦µÄ½çÃæ¡£Í¨¹ýÕâÖÖ·½Ê½£¬¾ÍºÜÈÝÒ×È¥±£Ö¤½çÃæµÄÒ»ÖÂÐÔ¡£
ÔÚReactÖУ¬Äã¼òµ¥µÄÈ¥¸üÐÂij¸ö×é¼þµÄ״̬£¬È»ºóÊä³ö»ùÓÚÐÂ״̬µÄÕû¸ö½çÃæ¡£React¸ºÔðÒÔ×î¸ßЧµÄ·½Ê½È¥±È½ÏÁ½¸ö½çÃæ²¢¸üÐÂDOMÊ÷¡£
ÕâÖÖ×é¼þÄ£Ðͼò»¯ÁËÎÒÃÇ˼¿¼µÄ·½Ê½£º¶Ô×é¼þµÄ¹ÜÀí¾ÍÊǶÔ״̬µÄ¹ÜÀí¡£²»Í¬ÓÚÆäËü¿ò¼ÜÄ£ÐÍ£¬React×é¼þºÜÉÙÐèÒª±©Â¶×é¼þ·½·¨ºÍÍⲿ½»»¥¡£ÀýÈ磬ij¸ö×é¼þÓÐÖ»¶ÁºÍ±à¼Á½¸ö״̬¡£Ò»°ãµÄ˼·¿ÉÄÜÊÇÌṩbeginEditing()ºÍendEditing()ÕâÑùµÄ·½·¨À´ÊµÏÖÇл»£»¶øÔÚReactÖУ¬ÐèÒª×öµÄÊÇsetState({editing:
true/false})¡£ÔÚ×é¼þµÄÊä³öÂß¼ÖиºÔðÕýÈ·Õ¹ÏÖµ±Ç°×´Ì¬¡£ÕâÖÖ·½Ê½£¬Äã²»ÐèÒª¿¼ÂÇbeginEditingºÍendEditingÖÐÓ¦¸ÃÔõÑù¸üÐÂUI£¬¶øÖ»ÐèÒª¿¼ÂÇÔÚij¸ö״̬Ï£¬UIÊÇÔõÑùµÄ¡£ÏÔÈ»ºóÕ߸ü¼Ó×ÔÈ»ºÍÖ±¹Û¡£
×é¼þÊÇReactÖй¹½¨Óû§½çÃæµÄ»ù±¾µ¥Î»¡£ËüÃǺÍÍâ½çµÄ½»»¥³ýÁË״̬£¨state£©Ö®Í⣬»¹ÓоÍÊÇÊôÐÔ£¨props£©¡£ÊÂʵÉÏ£¬×´Ì¬¸ü¶àµÄÊÇÒ»¸ö×é¼þÄÚ²¿È¥×Ô¼ºÎ¬»¤£¬¶øÊôÐÔÔòÓÉÍⲿÔÚ³õʼ»¯Õâ¸ö×é¼þʱ´«µÝ½øÀ´£¨Ò»°ãÊÇ×é¼þÐèÒª¹ÜÀíµÄÊý¾Ý£©¡£ReactÈÏΪÊôÐÔÓ¦¸ÃÊÇÖ»¶ÁµÄ£¬Ò»µ©¸³Öµ¹ýÈ¥ºó¾Í²»Ó¦¸Ã±ä»¯¡£¹ØÓÚ״̬ºÍÊôÐÔµÄʹÓÃÔÚºóÐøÎÄÕÂÖл¹»áÉîÈë̽ÌÖ¡£
ÿһ´Î½çÃæ±ä»¯¶¼ÊÇÕûÌåË¢ÐÂÊý¾ÝÄ£ÐÍÇý¶¯UI½çÃæµÄÁ½²ã±à³ÌÄ£ÐÍ´Ó¸ÅÄî½Ç¶È¿´ÉÏÈ¥ÊÇÖ±¹ÛµÄ£¬¶øÔÚʵ¼Ê¿ª·¢ÖÐÈ´À§ÄÑÖØÖØ¡£Ò»¸öÊý¾ÝÄ£Ð͵ı仯¿ÉÄܵ¼Ö·ÖÉ¢ÔÚ½çÃæ¶à¸ö½ÇÂäµÄUIͬʱ·¢Éú±ä»¯¡£½çÃæÔ½¸´ÔÓ£¬ÕâÖÖÊý¾ÝºÍ½çÃæµÄÒ»ÖÂÐÔÔ½ÄÑά»¤¡£ÔÚFacebookÄÚ²¿ËûÃdzÆÖ®Îª¡°Cascading
Updates¡±£¬¼´²ãµþʽ¸üУ¬Òâζ×ÅUI½çÃæÖ®¼ä»áÓÐÒ»ÖÖ»¥ÏàÒÀÀµµÄ¹ØÏµ¡£¿ª·¢ÕßΪÁËά»¤ÕâÖÖÒÀÀµ¸üУ¬ÓÐʱ²»µÃ²»´¥·¢´ó·¶Î§µÄ½çÃæË¢Ð£¬¶øÆäÖкܶಢ²»ÕæµÄÐèÒª¡£ReactµÄ³õÖÔÖ®Ò»¾ÍÊÇ£¬¼ÈÈ»ÕûÌåË¢ÐÂÒ»¶¨Äܽâ¾ö²ãµþ¸üеÄÎÊÌ⣬ÄÇÎÒÃÇΪʲô²»Ë÷ÐÔ¾Íÿ´Î¶¼Õâô×öÄØ£¿Èÿò¼Ü×ÔÉíÈ¥½â¾öÄÄЩ¾Ö²¿UIÐèÒª¸üеÄÎÊÌâ¡£ÕâÌýÉÏÈ¥·Ç³£ÓÐÌôÕ½£¬µ«ReactÈ´×öµ½ÁË£¬ÊµÏÖ;¾¶¾ÍÊÇͨ¹ýÐéÄâDOM£¨Virtual
DOM£©¡£
¹ØÓÚÐéÄâDOMµÄÔÀíÎÒÔÚÈ¥Äêµ×µÄÎÄÕÂÓйý±È½ÏÏêϸµÄ½éÉÜ£¬ÕâÀï²»ÔÙÖØ¸´¡£¼ò¶øÑÔÖ®¾ÍÊÇ£¬UI½çÃæÊÇÒ»¿ÃDOMÊ÷£¬¶ÔÓ¦µÄÎÒÃÇ´´½¨Ò»¸öÈ«¾ÖΨһµÄÊý¾ÝÄ£ÐÍ£¬Ã¿´ÎÊý¾ÝÄ£ÐÍÓÐÈκα仯£¬¶¼½«Õû¸öÊý¾ÝÄ£ÐÍÓ¦Óõ½UI
DOMÊ÷ÉÏ£¬ÓÉReactÀ´¸ºÔðÈ¥¸üÐÂÐèÒª¸üеĽçÃæ²¿·Ö¡£ÊÂʵ֤Ã÷£¬ÕâÖÖ·½Ê½²»µ«¼ò»¯ÁË¿ª·¢Âß¼²¢ÇÒ¼«´óµÄÌá¸ßÁËÐÔÄÜ¡£
ÒÔÕâÖÖ˼·³ö·¢£¬ÎÒÃÇÔÚ¿¼ÂDz»¶Ï±ä»¯µÄUI½çÃæÊ±£¬½ö½öÐèÒªÕûÌ忼ÂÇUIµÄ¹¹³É¡£±à³ÌÄ£Ð͵ļò»¯´øÀ´µÄÊÇ´úÂëµÄ¾«¼òºÍÒ×ÓÚÀí½â£¬Ò²¼´React²»¶ÏÌáµ½µÄ¿ÉÔ¤²â£¨Predictable£©µÄ´úÂ룬´úÂëµÄ¹¦ÄÜһĿÁËÈ»Ò×ÓÚÀí½â¡£Tom
OcchinoÔÚ2015 React¿ª·¢Õß´ó»áÉÏÒ²·ÖÏíÁËReactÔÚFacebookÄÚ²¿µÄÓ¦Óð¸Àý£¬Ëæ×Åй¦Äܱ»²»¶ÏµÄÌí¼Óµ½ÏµÍ³ÖУ¬¿ª·¢½ø¶È·Çµ«Ã»ÓбäÂý£¬ÉõÖÁÔ½À´Ô½¿ì¡£
µ¥ÏòÊý¾ÝÁ÷¶¯£ºFlux
¼ÈÈ»ÒѾÓÐÁË×é¼þ»úÖÆÈ¥¶¨Òå½çÃæ£¬ÄÇô»¹ÐèÒªÒ»¶¨µÄ»úÖÆÀ´¶¨Òå×é¼þÖ®¼ä£¬ÒÔ¼°×é¼þºÍÊý¾ÝÄ£ÐÍÖ®¼äÈçºÎͨÐÅ¡£Îª´Ë£¬FacebookÌá³öÁËFlux¿ò¼ÜÓÃÓÚ¹ÜÀíÊý¾ÝÁ÷¡£FluxÊÇÒ»¸öÏ൱¿íËɵĸÅÄî¿ò¼Ü£¬Í¬Ñù·ûºÏReact¼òµ¥Ö±¹ÛµÄÔÔò¡£²»Í¬ÓÚÆäËü´ó¶àÊýMVC¿ò¼ÜµÄË«ÏòÊý¾Ý°ó¶¨£¬FluxÌᳫµÄÊǵ¥ÏòÊý¾ÝÁ÷¶¯£¬¼´ÓÀÔ¶Ö»ÓдÓÄ£Ð͵½ÊÓͼµÄÊý¾ÝÁ÷¶¯¡£

FluxÒýÈëÁËDispatcherºÍActionµÄ¸ÅÄDispatcherÊÇÒ»¸öÈ«¾ÖµÄ·Ö·¢Æ÷¸ºÔð½ÓÊÕAction£¬¶øStore¿ÉÒÔÔÚDispatcherÉϼàÌýµ½Action²¢×ö³öÏàÓ¦µÄ²Ù×÷¡£¼òµ¥µÄÀí½â¿ÉÒÔÈÏΪÀàËÆÓÚÈ«¾ÖµÄÏûÏ¢·¢²¼¶©ÔÄÄ£ÐÍ¡£Action¿ÉÒÔÀ´×ÔÓÚÓû§µÄij¸ö½çÃæ²Ù×÷£¬±ÈÈçµã»÷Ìá½»°´Å¥£»Ò²¿ÉÒÔÀ´×Ô·þÎñÆ÷¶ËµÄij¸öÊý¾Ý¸üС£µ±Êý¾ÝÄ£ÐÍ·¢Éú±ä»¯Ê±£¬¾Í´¥·¢Ë¢ÐÂÕû¸ö½çÃæ¡£
FluxµÄ¶¨Òå·Ç³£¿íËÉ£¬³ýÁËFacebook×Ô¼ºµÄʵÏÖÖ®Í⣬ÉçÇøÖл¹³öÏÖÁ˺ܶàFluxµÄ²»Í¬ÊµÏÖ£¬¸÷ÓÐÌØµã£¬±È½ÏÁ÷ÐеİüÀ¨Flexible,
Reflux, FlummoxµÈµÈ¡£
ÈÃÊý¾ÝÄ£ÐÍÒ²±ä¼òµ¥£ºImmutability
Immutabilityº¬ÒåÊÇÖ»¶ÁÊý¾Ý£¬ReactÌᳫʹÓÃÖ»¶ÁÊý¾ÝÀ´½¨Á¢Êý¾ÝÄ£ÐÍ¡£ÕâÓÖÊÇÒ»¸öÌýÉÏÈ¥Ï൱·è¿ñµÄ»úÖÆ£ºËùÓÐÊý¾Ý¶¼ÊÇÖ»¶ÁµÄ£¬Èç¹ûÐèÒªÐÞ¸ÄËü£¬ÄÇôÄãÖ»ÄܲúÉúÒ»·Ý°üº¬ÐµÄÐ޸ĵÄÊý¾Ý¡£¼ÙÉèÓÐÈçÏÂÊý¾Ý£º
var employee = { name: ¡®John¡¯, age: 28 }; |
Èç¹ûÒªÐÞ¸ÄÄêÁ䣬ÄÇôÄãÐèÒª²úÉúÒ»·ÝеÄÊý¾Ý£º
var updated = { name: employee.name, age: 29 }; |
ÕâÑù£¬ÔÀ´µÄemployee¶ÔÏó²¢Ã»Óз¢ÉúÈκα仯£¬Ïà·´£¬²úÉúÁËÒ»¸öеÄupdated¶ÔÏó£¬ÌåÏÖÁËÄêÁä·¢ÉúÁ˱仯¡£ÕâʱºòÐèÒª°ÑеÄupdated¶ÔÏóÓ¦Óõ½½çÃæ×é¼þÉÏÀ´½øÐнçÃæµÄ¸üС£
Ö»¶ÁÊý¾Ý²¢²»ÊÇFacebookµÄȫз¢Ã÷£¬¶øÊÇÆðÔ´ÓÚClojure, Scala,
HaskellµÈº¯Êýʽ±à³ÌÓïÑÔ¡£Ö»¶ÁµÄÊý¾Ý¿ÉÒÔÈôúÂë¸ü¼ÓµÄ°²È«ºÍÒ×ÓÚά»¤£¬Äã²»ÔÙÐèÒªµ£ÐÄÊý¾ÝÔÚij¸ö½ÇÂ䱻ij¶ÎÉñÆæµÄ´úÂëËùÐ޸ģ»Ò²¾Í²»±ØÔÙΪÁËÕÒµ½Ð޸ĵĵط½¶ø¿à¿àµ÷ÊÔ¡£¶ø½áºÏReact£¬Ö»¶ÁÊý¾ÝÄܹ»ÈÃReactµÄ×é¼þ½ö½öͨ¹ý±È½Ï¶ÔÏóÒýÓÃÊÇ·ñÏàµÈÀ´¾ö¶¨×ÔÉíÊÇ·ñÒªÖØÐÂRender¡£ÕâÔÚ¸´ÔӵĽçÃæÉÏ¿ÉÒÔ¼«´óµÄÌá¸ßÐÔÄÜ¡£
Õë¶ÔÖ»¶ÁÊý¾Ý£¬Facebook¿ª·¢ÁËÒ»ÕûÌ׿ò¼Üimmutable.js£¬½«Ö»¶ÁÊý¾ÝµÄ¸ÅÄîÒýÈëJavaScript£¬²¢ÇÒÔÚgithub¿ªÔ´¡£Èç¹û²»Ï£ÍûÒ»¿ªÊ¼¾ÍÒýÈëÕâÑùÒ»¸ö½Ï´óµÄ¿ò¼Ü£¬React»¹ÌṩÁËÒ»¸ö¹¤¾ßÀà²å¼þ£¬°ïÖú¹ÜÀíºÍ²Ù×÷Ö»¶ÁÊý¾Ý£ºReact.addons.update¡£
Rea
t˼ÏëµÄÑÜÉú£ºReact Native, React CanvasµÈµÈ
ÔÚǰ¼¸ÌìµÄFacebook F8¿ª·¢Õß´ó»áÉÏ£¬React NativeÖÕÓÚÖÚÍûËù¹éµÄ·¢²¼£¬Ëü½«ReactµÄ˼ÏëÑÓÉìµ½ÁËÔÉúÒÆ¶¯¿ª·¢¡£ËüµÄ¿ÚºÅÊÇ¡°Learn
Once, Write Anywhere¡±£¬ÓÐReact¿ª·¢¾ÑéµÄ¿ª·¢ÈËÔ±½«¿ÉÒÔÎÞ·ìµÄ½øÐÐReact Native¿ª·¢¡£ÎÞÂÛÊÇ×é¼þ»¯µÄ˼Ï룬µ÷ÊÔ¹¤¾ß£¬¶¯Ì¬´úÂë¼ÓÔØµÈReact¾ßÓеÄÇ¿´óÌØÐÔ¶¼¿ÉÒÔÓ¦ÓÃÔÚReact
Native¡£ÏàÐÅÕâ»á¶ÔÒÔºóµÄÒÆ¶¯¿ª·¢²¼¾Ö²úÉúÖØÒªÓ°Ïì¡£
React¶ÔUI²ã½øÐÐÁËÍêÃÀµÄ³éÏó£¬Ð´Web½çÃæÊ±ÉõÖÁÄܹ»×öµ½ÍêÈ«µÄÈ¥DOM»¯£º¿ª·¢Õß¿ÉÒÔÎÞÐè½øÐÐÈκÎDOM²Ù×÷¡£Òò´Ë£¬ÕâÒ²ÈöÔUI²ã½øÐÐÕûÌåÌæ»»³ÉΪÁË¿ÉÄÜ¡£React
NativeÕýÊǽ«ä¯ÀÀÆ÷»ùÓÚDOMµÄUI²ã»»³ÉÁËiOS»òÕßAndroidµÄÔÉú¿Ø¼þ¡£¶øFlipboardÔò½«UI²ã»»³ÉÁËCanvas¡£
React CanvasÊÇFlipboard³öÆ·µÄÒ»Ì×ǰ¶Ë¿ò¼Ü£¬ËùÓеĽçÃæÔªËØ¶¼Í¨¹ýCanvasÀ´»æÖÆ£¬infoQ֮ǰҲÓÐÎÄÕÂ¶ÔÆä½øÐÐÁ˽éÉÜ¡£Flipboard×·Çó¼«ÖµÄÐÔÄܺÍÓû§ÌåÑ飬Òò´Ë¶Ôä¯ÀÀÆ÷µÄ»ºÂýDOM²Ù×÷Éî¶ñÍ´¾ø£¬²»Ï§´óµ¶À«¸«³¹µ×ÉáÆúÁËDOM£¬¶øÍêÈ«ÓÃCanvasʵÏÖÁËÕûÌ×UI¿Ø¼þ¡£ÓÐÐËȤµÄͬѧ²»·ÁÒ»ÊÔ¡£
С½á
React²¢²»ÊÇͻȻ´ÓÄÄÀï±Ä³öÀ´£¬¶øÊÇΪÁ˽â¾öǰ¶Ë¿ª·¢ÖеÄÍ´µã¶øÉú¡£ÒÔ¼òµ¥ÎªÔÔòÉè¼ÆÒ²¾ö¶¨ÁËReact¾ßÓм«Æäƽ»ºµÄѧϰÇúÏߣ¬¿ª·¢Õß¿ÉÒÔ¿ìËÙÉÏÊÖ²¢Ó¦Óõ½Êµ¼ÊÏîÄ¿ÖС£±¾ÎÄ×ܽá·ÖÎöÁËÆäÏà¹Ø¼¼Êõ±³ºóµÄÉè¼ÆË¼Ï룬ϣÍûͨ¹ýÕâ¸ö½Ç¶ÈÄÜÈôó¼Ò¶ÔReactÓÐÒ»¸ö×ÜÌåµÄÈÏʶ£¬´Ó¶øÔÚReactµÄʵ¼ÊÏîÄ¿¿ª·¢ÖУ¬×ñѼòµ¥Ö±¹ÛµÄÔÔò£¬½øÐиßЧÂʸßÖÊÁ¿µÄ²úÆ·¿ª·¢¡£
|