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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÉîÈëdz³öReact£¨Ò»£©£ºReactµÄÉè¼ÆÕÜѧ - ¼òµ¥Ö®ÃÀ
 
×÷ÕߣºÍõÅæ À´Ô´£ºInfoQ ·¢²¼ÓÚ 2015-11-17
  2196  次浏览      27
 

×Ô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µÄʵ¼ÊÏîÄ¿¿ª·¢ÖУ¬×ñÑ­¼òµ¥Ö±¹ÛµÄÔ­Ôò£¬½øÐиßЧÂʸßÖÊÁ¿µÄ²úÆ·¿ª·¢¡£

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

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ