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

1Ôª 10Ôª 50Ôª





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



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

ͨ¹ýǰÁ½ÆªÎÄÕµĽéÉÜ£¬ÏàÐÅ´ó¼Ò¶ÔJSXºÍ×é¼þÒѾ­ÓÐÁËÒ»¶¨µÄÁ˽⡣JSXÕâÖÖ»ìºÏʹÓÃJavaScriptºÍXMLµÄÓïÑÔµÚÒ»ÑÛ¿´ÉÏÈ¥ºÜ¡°³ó¡±£¬Ò²ºÜÉñÆæ£¬µ«ÊÇÆäÓï·¨ºÍ±³ºóµÄÂß¼­È´¼«Æä¼òµ¥¡£ÏàÐŶÁÍê±¾ÎÄÄã¾Í¿ÉÒÔ¶ÔJSXºÍ×é¼þÓÐÒ»¸öÈ«ÃæµÄÁ˽⣬²¢Äܹ»ÓÃJSXÀ´Ö±¹ÛµÄ¹¹ÔìÓû§½çÃæ¡£

ʲôÊÇJSX

ReactµÄºËÐÄ»úÖÆÖ®Ò»¾ÍÊÇÐéÄâDOM£º¿ÉÒÔÔÚÄÚ´æÖд´½¨µÄÐéÄâDOMÔªËØ¡£ReactÀûÓÃÐéÄâDOMÀ´¼õÉÙ¶Ôʵ¼ÊDOMµÄ²Ù×÷´Ó¶øÌáÉýÐÔÄÜ¡£ÀàËÆÓÚÕæÊµµÄÔ­ÉúDOM£¬ÐéÄâDOMÒ²¿ÉÒÔͨ¹ýJavaScriptÀ´´´½¨£¬ÀýÈ磺

var child1 = React.createElement('li', null, 'First Text Content');
var child2 = React.createElement('li', null, 'Second Text Content');
var root = React.createElement('ul', { className: 'my-list' }, child1, child2);

ʹÓÃÕâÑùµÄ»úÖÆ£¬ÎÒÃÇÍêÈ«¿ÉÒÔÓÃJavaScript¹¹½¨ÍêÕûµÄ½çÃæDOMÊ÷£¬ÕýÈçÎÒÃÇ¿ÉÒÔÓÃJavaScript´´½¨ÕæÊµDOM¡£µ«ÕâÑùµÄ´úÂë¿É¶ÁÐÔ²¢²»ºÃ£¬ÓÚÊÇReact·¢Ã÷ÁËJSX£¬ÀûÓÃÎÒÃÇÊìϤµÄHTMLÓï·¨À´´´½¨ÐéÄâDOM£º

var root =(
<ul className="my-list">
<li>First Text Content</li>
<li>Second Text Content</li>
</ul>
);

ÕâÁ½¶Î´úÂëÊÇÍêÈ«µÈ¼ÛµÄ£¬ºóÕß½«XMLÓï·¨Ö±½Ó¼ÓÈëµ½JavaScript´úÂëÖУ¬ÈÃÄãÄܹ»¸ßЧµÄͨ¹ý´úÂë¶ø²»ÊÇÄ£°åÀ´¶¨Òå½çÃæ¡£Ö®ºóJSXͨ¹ý·­ÒëÆ÷ת»»µ½´¿JavaScriptÔÙÓÉä¯ÀÀÆ÷Ö´ÐС£ÔÚʵ¼Ê¿ª·¢ÖУ¬JSXÔÚ²úÆ·´ò°ü½×¶Î¶¼ÒѾ­±àÒë³É´¿JavaScript£¬JSXµÄÓï·¨²»»á´øÀ´ÈκÎÐÔÄÜÓ°Ïì¡£ÁíÍ⣬ÓÉÓÚJSXÖ»ÊÇÒ»ÖÖÓï·¨£¬Òò´ËJavaScriptµÄ¹Ø¼ü×Öclass, forµÈÒ²²»ÄܳöÏÖÔÚXMLÖУ¬¶øÒªÈçÀý×ÓÖÐËùʾ£¬Ê¹ÓÃclassName, htmlFor´úÌæ£¬ÕâºÍÔ­ÉúDOMÔÚJavaScriptÖеĴ´½¨Ò²ÊÇÒ»Öµġ£

Òò´Ë£¬JSX±¾Éí²¢²»ÊÇʲô¸ßÉîµÄ¼¼Êõ£¬¿ÉÒÔ˵ֻÊÇÒ»¸ö±È½Ï¸ß¼¶µ«ºÜÖ±¹ÛµÄÓï·¨ÌÇ¡£Ëü·Ç³£ÓÐÓã¬È´²»ÊÇÒ»¸ö±ØÐèÆ·£¬Ã»ÓÐJSXµÄReactÒ²¿ÉÒÔÕý³£¹¤×÷£ºÖ»ÒªÄãÀÖÒâÓÃJavaScript´úÂëÈ¥´´½¨ÕâЩÐéÄâDOMÔªËØ¡£

ΪʲôʹÓÃJSX

ǰ¶Ë½çÃæµÄ×î»ù±¾¹¦ÄÜÔÚÓÚÕ¹ÏÖÊý¾Ý£¬Îª´Ë´ó¶àÊý¿ò¼Ü¶¼Ê¹ÓÃÁËÄ£°åÒýÇæ£¬ÀýÈçÔÚAngularJSÖУº

<div ng-if="person != null">
Welcome back, <b>{{person.firstName}} {{person.lastName}}</b>!
</div>
<div ng-if="person == null">
Please log in.
</div>

ÔÚEmberJSÖУº

{{#if person}}
Welcome back, <b>{{person.firstName}} {{person.lastName}}</b>!
{{else}}
Please log in.
{{/if}}

ÔÚKnockoutjsÖУº

<div data-bind="if: person != null">
Welcome back, <b>{{person.firstName}} {{person.lastName}}</b>!
</div>
<div data-bind="if: person == null">
Please log in.
</div>

Ä£°å¿ÉÒÔÖ±¹ÛµÄ¶¨ÒåUIÀ´Õ¹ÏÖModelÖеÄÊý¾Ý£¬Äã²»±ØÊÖ¶¯µÄȥƴ³öÒ»¸öºÜ³¤µÄHTML×Ö·û´®£¬¼¸ºõÿÖÖ¿ò¼Ü¶¼ÓÐ×Ô¼ºµÄÄ£°åÒýÇæ¡£´«Í³MVC¿ò¼ÜÇ¿µ÷½çÃæÕ¹Ê¾Âß¼­ºÍÒµÎñÂß¼­µÄ·ÖÀ룬Òò´ËΪÁËÓ¦¶Ô¸´ÔÓµÄչʾÂß¼­ÐèÇó£¬ÕâЩģ°åÒýÇæ¼¸ºõ¶¼²»¿É±ÜÃâµÄÐèÒª·¢Õ¹³ÉÒ»ÃŶÀÁ¢µÄÓïÑÔ£¬ÈçÉÏÃæ´úÂëËùʾ£¬Ã¿¸ö¿ò¼Ü¶¼ÓÐ×Ô¼ºµÄÄ£°åÓïÑÔÓï·¨¡£¶øÕâÎÞÒÉÔö¼ÓÁË¿ò¼ÜµÄÃż÷ºÍ¸´ÔÓ¶È¡£

Èç¹ûËµÕÆÎÕÒ»ÖÖÄ£°åÓïÑÔ²¢²»ÊǺܴóµÄÎÊÌ⣬ÄÇôÆäʵÓÉÄ£°å´øÀ´µÄ¼Ü¹¹¸´ÔÓÐÔÔòÊÇÈÿò¼ÜÒ²±äµÃ¸´ÔÓµÄÖØÒªÔ­ÒòÖ®Ò»£¬ÀýÈ磺

Ä£°åÐèÒª¶ÔÓ¦Êý¾ÝÄ£ÐÍ£¬¼´ÉÏÏÂÎÄ£¬ÈçºÎÈ¥°ó¶¨ºÍʵÏÖ£¿

Ä£°å¿ÉÒÔǶÌ×£¬²»Í¬²¿·Ö½çÃæ¿ÉÄÜÀ´×Ô²»Í¬Êý¾ÝÄ£ÐÍ£¬ÈçºÎ´¦Àí£¿

Ä£°åÓïÑÔÖÕ¾¿ÊÇÒ»¸öÇáÁ¿¼¶ÓïÑÔ£¬ÎªÁËÂú×ãÏîÄ¿ÐèÇó£¬ÄãºÜ¿ÉÄÜÐèÒªÀ©Õ¹Ä£°åÒýÇæµÄ¹¦ÄÜ¡£

ΪÁ˽â¾öÕâЩ¸´ÔÓ¶È£¬¿ò¼Ü±¾ÉíÐèÒª¾«ÐĵÄÉè¼Æ£¬ÒÔ¼°´´ÔìеĸÅÄÀýÈçAngularµÄDirective£©¡£ÕâЩ¶¼»áÈÿò¼Ü±äµÃ¸´ÔÓºÍÄÑÒÔÕÆÎÕ£¬²»½öÔö¼ÓÁË¿ª·¢³É±¾£¬¸÷ÖÖÄÑÒÔµ÷ÊÔµÄBug»¹»á½µµÍ¿ª·¢ÖÊÁ¿¡£

ÕýÒòΪÈç´Ë£¬ReactÖ±½Ó·ÅÆúÁËÄ£°å¶ø·¢Ã÷ÁËJSX¡£¿´ÉÏÈ¥ºÜÏñÄ£°åÓïÑÔ£¬µ«Æä±¾ÖÊÊÇͨ¹ý´úÂëÀ´¹¹½¨½çÃæ£¬ÕâʹµÃÎÒÃDz»ÔÙÐèÒªÕÆÎÕÒ»ÃÅеÄÓïÑԾͿÉÒÔÖ±¹ÛµÄÈ¥¶¨ÒåÓû§½çÃæ£ºÕÆÎÕÁËJavaScript¾ÍÒѾ­ÕÆÎÕÁËJSX¡£ÕâÀï²»·ÁÔÙÒýÓÃ֮ǰÎÄÕ¾ٹýµÄÀý×Ó£¬ÔÚչʾһ¸öÁбíʱ£¬Ä£°åÓïÑÔͨ³£ÌṩÃûΪRepeatµÄÓï·¨£¬ÀýÈçÔÚAngularÖУº

<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>

¶øÊ¹ÓÃJSX£¬Ôò´úÂëÈçÏ£º

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>
);
});

var ul = (
<ul class="unstyled">
{lis}
</ul>
);

¿ÉÒÔ¿´µ½£¬JSXÍêÃÀÀûÓÃÁËJavaScript×Ô´øµÄÓï·¨ºÍÌØÐÔ£¬ÎÒÃÇÖ»Òª¼ÇסHTMLÖ»ÊÇ´úÂë´´½¨DOMµÄÒ»ÖÖÓï·¨ÐÎʽ£¬¾ÍºÜÈÝÒ×Àí½âJSX¡£¶øÕâÖÖʹÓôúÂë¹¹½¨½çÃæµÄ·½Ê½£¬ÍêÈ«Ïû³ýÁËÒµÎñÂß¼­ºÍ½çÃæÔªËØÖ®¼äµÄ¸ôºÒ£¬ÈôúÂë¸ü¼ÓÖ±¹ÛºÍÒ×ÓÚά»¤¡£

JSXµÄÓï·¨

JSX±¾Éí¾ÍºÍXMLÓï·¨ÀàËÆ£¬¿ÉÒÔ¶¨ÒåÊôÐÔÒÔ¼°×ÓÔªËØ¡£Î¨Ò»ÌØÊâµÄÊÇ¿ÉÒÔÓôóÀ¨ºÅÀ´¼ÓÈëJavaScript±í´ïʽ£¬ÀýÈ磺

var person = <Person name={window.isLoggedIn ? window.name : ''} />;

Ò»°ãÿ¸ö×é¼þ¶¼¶¨ÒåÁËÒ»×éÊôÐÔ£¨props£¬propertiesµÄ¼òд£©½ÓÊÕÊäÈë²ÎÊý£¬ÕâЩÊôÐÔͨ¹ýXML±ê¼ÇµÄÊôÐÔÀ´Ö¸¶¨¡£´óÀ¨ºÅÖеÄÓï·¨¾ÍÊÇ´¿JavaScript±í´ïʽ£¬·µ»ØÖµ»á¸³Óè×é¼þµÄ¶ÔÓ¦ÊôÐÔ£¬Òò´Ë¿ÉÒÔʹÓÃÈκÎJavaScript±äÁ¿»òÕߺ¯Êýµ÷Óá£ÉÏÊö´úÂë¾­¹ýJSX±àÒëºó»áµÃµ½£º

var person = React.createElement(
Person,
{name: window.isLoggedIn ? window.name : ''}
);

¶ÔÓÚ×ÓÔªËØÒ²ÊÇÀàËÆ£¬´óÀ¨ºÅÖÐʹÓÃJavaScript±í´ïʽÀ´·µ»ØÐèÒªÕ¹ÏÖµÄÔªËØ£¬ÀýÈçÎÄÕ¿ªÍ·Ìáµ½µÄÀý×ÓʹÓÃJSX¿ÉÒÔд³É£º

var node = (
<div className="container">
{
person ? <span>Welcome back, <b>{person.firstName} {person.lastName}</b>!</span>
: <span>Please log in</span>
}
</div>
);

¼ÈÈ»´óÀ¨ºÅÖÐÊÇJavaScript£¬¶øJSXÓÖÔÊÐíÔÚJavaScriptÖÐʹÓÃXML£¬Òò´ËÔÚ´óÀ¨ºÅÖÐÈÔÈ»¿ÉÒÔʹÓÃXMLÀ´ÉùÃ÷×é¼þ£¬²»¶ÏµÝ¹éʹÓá£

Èç¹ûÐèÒªÕ¹ÏÖÒ»×é×ӽڵ㣬ֻÐè±í´ïʽ·µ»ØÒ»¸öJavaScriptÊý×飬Êý×éµÄÿ¸öÔªËØ¶¼ÊÇÒ»¸öReact×é¼þ£¬ÀýÈçÉÏÒ»½ÚµÄÀý×Ó£¬ÆäÖÐlis¾ÍÊÇÓжà¸ö¡°li¡±ÔªËصÄÊý×é¡££º

var ul = (
<ul class="unstyled">
{lis}
</ul>
);

ÔÚJSXÖÐʹÓÃʼþ

Èç¹ûÄãÔÚ90Äê´úд¹ýHTML£¬ÄÇôҲÐí»áÓе㻳ÄîÄÇʱµÄʼþ°ó¶¨ÊǶàôµÄÖ±¹ÛºÍ¼òµ¥£º

<button onclick="checkAndSubmit(this.form)">Submit</button>

ÄÇʱµÄJavaScriptÓ¦Ó÷¶Î§·Ç³£ÓÐÏÞ£¬×îÓÐÓõÄÒ²Ðí¾ÍÊÇ×ö±íµ¥ÓÐЧÐÔÑéÖ¤¡£ÒòΪÂß¼­¶¼ºÜ¼òµ¥£¬Ö±½Óдµ½HTMLÖв¢Ã»ÓÐÎÊÌ⣬¶øÇÒÕâÖÖ·½Ê½·Ç³£Ö±¹ÛÒ×¶Á¡£µ«ÊÇÏÖÔÚÒòΪWeb³ÌÐò±äµÄÔ½À´Ô½¸´ÔÓ£¬ÎÒÃǾÍÐèҪʹÓÃJavaScriptÀ´°ó¶¨Ê¼þ£¬ÀýÈçÔÚjQueryÖУº

$('#my-button').on('click', this.checkAndSubmit.bind(this));

ÔÚ¿´µ½Õâ¶Îʼþ°ó¶¨ºÍÑéÖ¤Âß¼­Ö®Ç°£¬ÄãÎÞ·¨Ö±¹ÛµÄ¿´µ½ÓÐʼþ°ó¶¨ÔÚij¸öÔªËØÉÏ£¬ÕâÖÖÒþ²ØµÄ½çÃæÔªËØºÍÒµÎñÂß¼­µÄñîºÏÊǺܶàBugºÍÄÚ´æÐ¹Â¶²úÉúµÄ¸ùÔ´¡£ÐÒÔ˵ÄÊÇ£¬ÏÖÔÚJSX¿ÉÒÔÈÃʼþ°ó¶¨·µè±¹éÕæ£º

<button onClick={this.checkAndSubmit.bind(this)}>Submit</button>

ºÍÔ­ÉúHTML¶¨ÒåʼþµÄÎ¨Ò»Çø±ð¾ÍÊÇJSX²ÉÓÃÍÕ·åд·¨À´ÃèÊöʼþÃû³Æ£¬´óÀ¨ºÅÖÐÈÔÈ»ÊDZê×¼µÄJavaScript±í´ïʽ£¬·µ»ØÒ»¸öʼþ´¦Àíº¯Êý¡£ÔÚJSXÖÐÄã²»ÐèÒª¹ØÐÄʲôʱ»úÈ¥ÒÆ³ýʼþ°ó¶¨£¬ÒòΪReact»áÔÚ¶ÔÓ¦µÄÕæÊµDOM½ÚµãÒÆ³ýʱ¾Í×Ô¶¯½â³ýÁËʼþ°ó¶¨¡£

React²¢²»»áÕæÕýµÄ°ó¶¨Ê¼þµ½Ã¿Ò»¸ö¾ßÌåµÄÔªËØÉÏ£¬¶øÊDzÉÓÃʼþ´úÀíµÄģʽ£ºÔÚ¸ù½ÚµãdocumentÉÏΪÿÖÖʼþÌí¼ÓΨһµÄListener£¬È»ºóͨ¹ýʼþµÄtargetÕÒµ½ÕæÊµµÄ´¥·¢ÔªËØ¡£ÕâÑù´Ó´¥·¢ÔªËص½¶¥²ã½ÚµãÖ®¼äµÄËùÓнڵãÈç¹ûÓаó¶¨Õâ¸öʼþ£¬React¶¼»á´¥·¢¶ÔÓ¦µÄʼþ´¦Àíº¯Êý¡£Õâ¾ÍÊÇËùνµÄReactÄ£Äâʼþϵͳ¡£

¾¡¹ÜÕû¸öʼþϵͳÓÉReact¹ÜÀí£¬µ«ÊÇÆäAPIºÍʹÓ÷½·¨ÓëÔ­ÉúʼþÒ»Ö¡£ÕâÖÖ»úÖÆÈ·±£ÁË¿çä¯ÀÀÆ÷µÄÒ»ÖÂÐÔ£ºÔÚËùÓÐä¯ÀÀÆ÷£¨IE8¼°ÒÔÉÏ£©¶¼¿ÉÒÔʹÓ÷ûºÏW3C±ê×¼µÄAPI£¬°üÀ¨stopPropagation()£¬preventDefault()µÈµÈ¡£¶ÔÓÚʼþµÄðÅÝ£¨bubble£©ºÍ²¶»ñ£¨capture£©Ä£Ê½Ò²¶¼Íêȫ֧³Ö¡£

ÔÚJSXÖÐʹÓÃÑùʽ

¾¡¹ÜÔڴ󲿷ֳ¡¾°ÏÂÎÒÃÇÓ¦¸Ã½«ÑùʽдÔÚ¶ÀÁ¢µÄCSSÎļþÖУ¬µ«ÊÇÓÐʱ¶ÔÓÚij¸öÌØ¶¨×é¼þ¶øÑÔ£¬ÆäÑùʽÏ൱¼òµ¥¶øÇÒ¶ÀÁ¢£¬ÄÇôҲ¿ÉÒÔ½«ÆäÖ±½Ó¶¨ÒåÔÚJSXÖС£ÔÚJSXÖÐʹÓÃÑùʽºÍÕæÊµµÄÑùʽҲºÜÀàËÆ£¬Í¨¹ýstyleÊôÐÔÀ´¶¨Ò壬µ«ºÍÕæÊµDOM²»Í¬µÄÊÇ£¬ÊôÐÔÖµ²»ÄÜÊÇ×Ö·û´®¶ø±ØÐëΪ¶ÔÏó£¬ÀýÈ磺

<div style={{color: '#ff0000', fontSize: '14px'}}>Hello World.</div>

Õ§Ò»¿´£¬Õâ¶ÎJSXÖеĴóÀ¨ºÅÊÇË«µÄ£¬ÓÐµãÆæ¹Ö£¬µ«Êµ¼ÊÉÏÀïÃæµÄ´óÀ¨ºÅÖ»ÊDZê×¼µÄJavaScript¶ÔÏó±í´ïʽ£¬ÍâÃæµÄ´óÀ¨ºÅÊÇJSXµÄÓï·¨¡£ËùÒÔ£¬ÑùʽÄãÒ²¿ÉÒÔÏȸ³Öµ¸øÒ»¸ö±äÁ¿£¬È»ºó´«½øÈ¥£¬´úÂë»á¸üÒ×¶Á£º

var style = {
color: '#ff0000',
fontSize: '14px'
};var node = <div style={style}>HelloWorld.</div>;

ÔÚJSXÖпÉÒÔʹÓÃËùÓеĵÄÑùʽ£¬»ù±¾ÉÏÊôÐÔÃûµÄת»»¹æ·¶¾ÍÊǽ«Æäд³ÉÍÕ·åд·¨£¬ÀýÈç¡°background-color¡±±äΪ¡°backgroundColor¡±, ¡°font-size¡±±äΪ¡°fontSize¡±£¬ÕâºÍ±ê×¼µÄJavaScript²Ù×÷DOMÑùʽµÄAPIÊÇÒ»Öµġ£

ʹÓÃ×Ô¶¨Òå×é¼þ

ÔÚJSXÖУ¬ÎÒÃDz»½ö¿ÉÒÔʹÓÃReact×Ô´ødiv, input...ÕâЩÐéÄâDOMÔªËØ£¬»¹¿ÉÒÔ×Ô¶¨Òå×é¼þ¡£×é¼þ¶¨ÒåÖ®ºó£¬Ò²¶¼¿ÉÒÔÀûÓÃXMLÓ﷨ȥÉùÃ÷£¬¶øÄܹ»Ê¹ÓõÄXML Tag¾ÍÊÇÔÚµ±Ç°JavaScriptÉÏÏÂÎĵıäÁ¿Ãû£¬ÕâÒ»µã·Ç³£ºÃÓã¬Äã²»±ØÔÙÈ¥¿¼ÂÇij¸öTagÊÇÈçºÎ¶ÔÓ¦µ½ÏàÓ¦µÄ×é¼þʵÏÖ¡£ÀýÈçReact¹Ù·½½Ì³ÌÖеÄÀý×Ó£º

class HelloWorld extends React.Component{
render() {
return (
<p>
Hello, <input type="text" placeholder="Your name here" />!
It is {this.props.date.toTimeString()}
</p>
);
}
};

setInterval(function() {
React.render(
<HelloWorld date={new Date()} />,
document.getElementById('example')
);
}, 500);

ÆäÖÐÉùÃ÷ÁËÒ»¸öÃûΪHelloWorldµÄ×é¼þ£¬ÄÇô¾Í¿ÉÒÔÔÚXMLÖÐʹÓÃ<HellWorld />£¬Õâ¸öTag¾ÍÊÇJavaScript±äÁ¿Ãû£¬ÎÒÃÇ¿ÉÒÔÓÃÈÎÒâ±äÁ¿Ãû£º

var MyHelloWorld = HelloWorld;
React.render(<MyHelloWorld />, ¡­);

ÉõÖÁ£¬ÎÒÃÇ»¹¿ÉÒÔÒýÈëÃüÃû¿Õ¼ä£º

var sampleNameSpace = {
MyHelloWorld: HelloWorld
};
React.render(<sampleNameSpace.MyHelloWorld />, ¡­);

ÕâЩÓï·¨¿´ÉÏÈ¥Óеã¹Ö£¬µ«ÊÇÈç¹ûÎÒÃǼÇסJSXÓï·¨Ö»ÊÇJavaScriptÓï·¨µÄÒ»¸öÓï·¨Ó³É䣬ÄÇôÕâЩ¾Í·Ç³£ÈÝÒ×Àí½âÁË¡£

×é¼þµÄ¸ÅÄîºÍÉúÃüÖÜÆÚ

ReactʹÓÃ×é¼þÀ´·â×°½çÃæÄ£¿é£¬Õû¸ö½çÃæ¾ÍÊÇÒ»¸ö´ó×é¼þ£¬¿ª·¢¹ý³Ì¾ÍÊDz»¶ÏÓÅ»¯ºÍ²ð·Ö½çÃæ×é¼þ¡¢¹¹ÔìÕû¸ö×é¼þÊ÷µÄ¹ý³Ì¡£¿ÉÒÔÈÏΪ×é¼þÀàËÆÓÚÆäËû¿ò¼ÜÖÐWidget£¨»òControl£©µÄ¸ÅÄµ«ÓÖÓÐËù²»Í¬¡£ReactÖеĽçÃæÒ»ÇнÔΪ×é¼þ£¬¶øWidgetÒ»°ãÖ»ÊÇǶÈëµ½½çÃæÖÐΪÍê³Éij¸ö¹¦ÄܵĶÀÁ¢Ä£¿é¡£

ÈçÏÂͼ£¬Õû¸öÒ³ÃæÊÇÒ»¸ö´óµÄ×é¼þ£¬È»ºóÔÙ½«Æä²ð·Ö³ÉºÜ¶àСµÄ×é¼þ¡£×é¼þ»úÖÆ¼ÓÉÏJSXµÄÓï·¨£¬ÈÃÄãÔÚ¹¹Ôì½çÃæÊ±¾ÍÏñÓÐÒ»Ì×·ûºÏÏîÄ¿ÐèÇóµÄHTML±ê¼Ç£¬½çÃæ¶¨Òå±äµÃ·Ç³£Ö±¹Û¡£

×é¼þ×ÔÉí¶¨ÒåÁËÒ»×éprops×÷Ϊ¶ÔÍâ½Ó¿Ú£¬Õ¹Ê¾Ò»¸ö×é¼þʱֻÐèÒªÖ¸¶¨props×÷ΪXML½ÚµãµÄÊôÐÔ¡£×é¼þºÜÉÙÐèÒª¶ÔÍ⹫¿ª·½·¨£¬Î¨Ò»µÄ½»»¥Í¾¾¶¾ÍÊÇprops¡£ÕâʹµÃʹÓÃ×é¼þ¾ÍÏñʹÓú¯ÊýÒ»Ñù¼òµ¥£¬¸ø¶¨Ò»¸öÊäÈ룬×é¼þ¸ø¶¨Ò»¸ö½çÃæÊä³ö¡£µ±¸øÓèµÄ²ÎÊýÒ»¶¨Ê±£¬ÄÇôÊä³öÒ²ÊÇÒ»¶¨µÄ¡£¶ø´«Í³¿Ø¼þͨ³£ÌṩºÜ¶à·½·¨ÈÃÄãÔÚÍⲿ¸Ä±ä¿Ø¼þµÄ״̬ºÍÐÐΪ£¬µ±¿Ø¼þµÄ״̬ÔÚ²»Í¬³¡¾°²»Í¬Âß¼­ÖпÉÒÔ±»ËæÒâ¿ØÖÆÊ±£¬¿ª·¢ºÍµ÷ÊÔÒ²»á±äµÃ¸´ÔÓ¡£
¶øReact×é¼þͨ¹ýΨһµÄprops½Ó¿Ú±ÜÃâÁËÂß¼­¸´ÔÓÐÔ£¬Èÿª·¢²âÊÔ¶¼¸ü¼ÓÈÝÒס£ÕâÖÖÌØÐÔÍêÈ«µÃÒæÓÚÐéÄâDOM»úÖÆ£¬ÈÃÄã¿ÉÒÔÿ´Îprops¸Ä±ä¶¼ÄÜÒÔÕûÌåË¢ÐÂÒ³ÃæµÄ˼·ȥ¿¼ÂǽçÃæÕ¹ÏÖÂß¼­¡£

Èç¹ûÕû¸öÏîÄ¿ÍêÈ«²ÉÓÃReact£¬ÄÇô½çÃæÉϾÍÖ»ÓÐÒ»¸ö×é¼þ¸ù½Úµã£»Èç¹û¾Ö²¿Ê¹ÓÃReact£¬ÄÇôÿ¸ö¾Ö²¿Ê¹ÓõIJ¿·Ö¶¼ÓÐÒ»¸ö¸ù½Úµã¡£ÔÚRenderʱ£¬¸ù½ÚµãÓÉReact.renderº¯ÊýÈ¥´¥·¢£º

React.render(
<App />,
document.getElementById('react-root')
);

¶øËùÓеÄ×Ó½ÚµãÔò¶¼ÊÇͨ¹ý¸¸½ÚµãµÄrender·½·¨È¥¹¹ÔìµÄ¡£Ã¿¸ö×é¼þ¶¼»áÓÐÒ»¸örender·½·¨£¬Õâ¸ö·½·¨·µ»Ø×é¼þµÄʵÀý£¬×îÖÕÕû¸ö½çÃæµÃµ½Ò»¸öÐéÄâDOMÊ÷£¬ÔÙÓÉReactÒÔ×î¸ßЧµÄ·½Ê½Õ¹ÏÖÔÚ½çÃæÉÏ¡£

³ýÁËpropsÖ®Í⣬×é¼þ»¹ÓÐÒ»¸öºÜÖØÒªµÄ¸ÅÄstate¡£×é¼þ¹æ·¶Öж¨ÒåÁËsetState·½·¨£¬Ã¿´Îµ÷ÓÃʱ¶¼»á¸üÐÂ×é¼þµÄ״̬£¬´¥·¢render·½·¨¡£ÐèҪעÒ⣬render·½·¨ÊDZ»Òì²½µ÷Óõģ¬Õâ¿ÉÒÔ±£Ö¤Í¬²½µÄ¶à¸ösetState·½·¨Ö»»á´¥·¢Ò»´Îrender£¬ÓÐÀûÓÚÌá¸ßÐÔÄÜ¡£ºÍprops²»Í¬£¬stateÊÇ×é¼þµÄÄÚ²¿×´Ì¬£¬³ýÁ˳õʼ»¯Ê±¿ÉÄÜÓÉpropsÀ´¾ö¶¨£¬Ö®ºó¾ÍÍêÈ«ÓÉ×é¼þ×ÔÉíȥά»¤¡£ÔÚ×é¼þµÄÕû¸öÉúÃüÖÜÆÚÖУ¬ReactÇ¿ÁÒ²»ÍƼöÈ¥ÐÞ¸Ä×ÔÉíµÄprops£¬ÒòΪÕâ»áÆÆ»µUIºÍModelµÄÒ»ÖÂÐÔ£¬propsÖ»Äܹ»ÓÉʹÓÃÕßÀ´¾ö¶¨¡£

¶ÔÓÚ×Ô¶¨Òå×é¼þ£¬Î¨Ò»±ØÐëʵÏֵķ½·¨¾ÍÊÇrender()£¬³ý´ËÖ®Í⣬»¹ÓÐһЩ·½·¨»áÔÚ×é¼þÉúÃüÖÜÆÚÖб»µ÷Óã¬ÈçÏÂͼËùʾ£º

ͼÖеķ½·¨¼¸ºõÒѾ­°üÀ¨ÁËReactµÄËùÓÐAPI£¬×Ô¶¨Òå×é¼þʱ¸ù¾ÝÐèÒªÔÚ×é¼þÉúÃüÖÜÆÚµÄ²»Í¬½×¶ÎʵÏÖ²»Í¬µÄÂß¼­¡£³ýÁ˱ØÐëµÄrender·½·¨Ö®Í⣬ÆäËü³£Óõķ½·¨°üÀ¨£º

componentDidMount: ÔÚ×é¼þµÚÒ»´ÎrenderÖ®ºóµ÷Óã¬Õâʱ×é¼þ¶ÔÓ¦µÄDOM½ÚµãÒѱ»¼ÓÈëµ½ä¯ÀÀÆ÷¡£ÔÚÕâ¸ö·½·¨Àï¿ÉÒÔȥʵÏÖһЩ³õʼ»¯Âß¼­¡£

componentWillUnmount: ÔÚDOM½ÚµãÒÆ³ýÖ®ºó±»µ÷Óã¬ÕâÀï¿ÉÒÔ×öһЩÏà¹ØµÄÇåÀí¹¤×÷¡£

shouldComponentUpdate: ÕâÊÇÒ»¸öºÍÐÔÄܷdz£Ïà¹ØµÄ·½·¨£¬ÔÚÿһ´Îrender·½·¨Ö®Ç°±»µ÷Óá£ËüÌṩÁËÒ»¸ö»ú»áÈÃÄã¾ö¶¨ÊÇ·ñÒª¶Ô×é¼þ½øÐÐʵ¼ÊµÄrender¡£ÀýÈ磺

shouldComponentUpdate(nextProps, nextState) {
return nextProps.id !== this.props.id;
}

µ±´Ëº¯Êý·µ»Øfalseʱ£¬×é¼þ¾Í²»»áµ÷ÓÃrender·½·¨´Ó¶ø±ÜÃâÁËÐéÄâDOMµÄ´´½¨ºÍÄÚ´æÖеÄDiff±È½Ï£¬´Ó¶øÓÐÖúÓÚÌá¸ßÐÔÄÜ¡£µ±·µ»Øtrueʱ£¬Ôò»á½øÐÐÕý³£µÄrenderµÄÂß¼­¡£

×é¼þÊÇReactµÄºËÐÄ£¬ËäÈ»¹¦ÄܺÜÇ¿´ó£¬µ«ÊÇÆäAPIºÍ¸ÅÄîÈ´Ê®·Ö¼òµ¥£¬ÒÔÖÁÓÚÄãֻҪʵÏÖÒ»¸örender·½·¨¾Í¿ÉÒÔ´´½¨Ò»¸ö×é¼þ¡£Õâ´ó´ó½µµÍÁËReactѧϰÃż÷¡£

ʹÓÃBabel½øÐÐJSX±àÒë

¾ÍÔÚ±¾ÎÄ׫д¹ý³ÌÖУ¬React¹Ù·½²©¿Í·¢²¼ÁËһƪÎÄÕ£¬ÉùÃ÷Æä×ÔÉíÓÃÓÚJSXÓï·¨½âÎöµÄ±àÒëÆ÷JSTransformÒѾ­¹ýÆÚ£¬²»ÔÙά»¤£¬React JSºÍReact NativeÒѾ­È«²¿²ÉÓõÚÈý·½BabelµÄJSX±àÒëÆ÷ʵÏÖ¡£Ô­ÒòÊÇÁ½ÕßÔÚ¹¦ÄÜÉÏÒѾ­ÍêÈ«ÖØ¸´£¬¶øBabel×÷ΪרÃŵÄJavaScriptÓï·¨±àÒ빤¾ß£¬ÌṩÁ˸üΪǿ´óµÄ¹¦ÄÜ¡£ÔÚÕâÀï±ÊÕßÒ²²»µÃ²»¸Ð̾FacebookµÄÐØ»³£¬ÒԷdz£¿ª·ÅµÄ̬¶ÈÈ¥Óµ±§¿ªÔ´ÉçÇø£¬´Ó¶ø´ïµ½¹²Ó®µÄÄ¿µÄ¡£

JSXÊÇÒ»ÖÖеÄÓï·¨£¬ä¯ÀÀÆ÷²¢²»ÄÜÖ±½ÓÔËÐУ¬Òò´ËÐèÒªÕâÖÖ·­ÒëÆ÷¡£ÔÚÉÏһƪÎÄÕÂÖÐÎÒÃÇÍÆ¼öʹÓÃWebpack½øÐÐReactµÄ¿ª·¢£¬Òª½«JSXµÄ±àÒëÆ÷´ÓJSTransformÇл»µ½Babel·Ç³£¼òµ¥£¬Ê×ÏÈͨ¹ýnpm°²×°Babel£º

npm install ¡ªsave-dev babel-loader

Ö»ÐèÉÔ΢¸Ä±äÒ»ÏÂwebpack.config.jsµÄÅäÖ㬽«Ô­À´µÄjsx-loader±äΪbabel-loader£º

module: {
loaders: [
{ test: /\.jsx?$/, loaders: ['babel-loader']}
]
}

С½á

±¾ÎÄÖ÷Òª½éÉÜÁËReactÖÐ×îÖØÒªµÄ×é¼þ»úÖÆ£¬ÒÔ¼°ÉùÃ÷×é¼þµÄÓï·¨JSX¡£¿´ËÆÓеãÉñÃØµÄJSX±³ºóµÄÔ­Àí·Ç³£¼òµ¥£ºÖ»ÊÇÒ»ÖÖÓÃÓÚ´´½¨×é¼þµÄXMLÓï·¨¡£ÈôúÂëÖ±¹ÛÒ×¶®ÊÇÈí¼þÏîÄ¿ÖÊÁ¿µÄÖØÒª±£Ö¤Ö®Ò»£¬ÕâÒâζ×Å´úÂë¸ü¼ÓÈÝÒ×Àí½âºÍά»¤£¬³öÏÖBugʱ¸üÈÝÒ×µ÷ÊÔºÍÐÞ¸´¡£Òò´ËReactÕâÖÖ²ÉÓÃJSXÓï·¨£¬ÒÔÉùÃ÷ʽµÄ·½·¨À´Ö±¹ÛµÄ¶¨ÒåÓû§½çÃæµÄ·½Ê½£¬ÕýÊÇÆä×î´óµÄ¼ÛÖµ¡£

Õû¸ö×é¼þ»úÖÆÔËÐеĻù´¡ÊÇÐéÄâDOM£¬ÕýÒòΪReactÄܹ»ÒÔ¼«¸ßµÄÐÔÄÜÈ¥±È½ÏÁ½¸öÐéÄâDOMÊ÷µÄDiff£¬²ÅʵÏÖÁËÿ´Î¾Ö²¿¸üж¼Í¨¹ýË¢ÐÂÕû¸öÒ³ÃæÕâÖÖ˼¿¼Ä£Ê½£¬½µµÍÁË¿ª·¢¸´ÔÓ¶È¡£ÔÚÏÂһƪÎÄÕÂÖоͽ«»áºÍ´ó¼ÒÒ»ÆðÑо¿ÐéÄâDOMµÄDiffËã·¨£¬Á˽âÆä±³ºóµÄÔËÐÐÔ­Àí¡£

   
2173 ´Îä¯ÀÀ       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¼°ÆäÇ°ÑØ¼¼Êõ