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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
¼ÇÒ»´ÎÄÑÍüµÄǰ¶Ë¼¼Êõ¿ò¼ÜÇл»Ö®Âá¾WEBǰ¶Ë´ó×÷Õ½¡¿
 
×÷ÕߣºÒ»¿Å°×²Ë
  3575  次浏览      27
 2021-5-17
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉܽéÉÜǰ¶Ë·¢Õ¹Ê·£¬²¢´î½¨ºÃReactÏîÄ¿¹¤³Ì¡¢»®·Ö×é¼þ£¬×îºó½éÉÜÈçºÎдһ¸öReactµÄ×é¼þ£¬¸ü¶àÏêϸÄÚÈÝÇëÔĶÁ±¾ÎÄ¡£
±¾ÎÄÀ´×ÔÓÚ»ªÎªÔÆÉçÇø ,ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­ÍƼö¡£

¡¾ÕªÒª¡¿ ¼ÇÒ»´ÎÄÑÍüµÄǰ¶Ë¼¼Êõ¿ò¼ÜÇл»Ö®ÂÃ1 ÂÃÐÐ֮ʼ 2020Äê³õ£¬Ä³¸öÆÕͨµÄ¹¤×÷ÈÕ£¬ÕýÔÚ¾Û¾«»áÉñ¡°¸ãÊÂÇ顱µÄÎÒ£¬½Óµ½MAE-Accessǰ¶Ë¼¼Êõר¼ÒµÄespaceÓïÒô£¬±»¸æÖªMAE-AccessÓòʹÓõÄǰ¶Ë¼¼Êõ¿ò¼ÜÐèÒª´ÓAngularJS1.xÇл»µ½React£¬ÒªÇó2020Äêµ×Íê³É¡£½Óµ½ÏûÏ¢µÄÎÒ£¬ÓÇϲ½»¼Ó£¬»ú»áÓëÌôÕ½²¢´æ£¬Õâ´Îǰ¶Ë¼¼Êõ¿ò¼ÜÇл»Ö®ÂÃÔÚËùÄÑÃ⣬µ«¸ÃÈçºÎ¿ªÊ¼£¬ÓÖ¸ÃÈçºÎ½áÊø...

1 ÂÃÐÐ֮ʼ

2020Äê³õ£¬Ä³¸öÆÕͨµÄ¹¤×÷ÈÕ£¬ÕýÔÚ¾Û¾«»áÉñ¡°¸ãÊÂÇ顱µÄÎÒ£¬½Óµ½MAE-Accessǰ¶Ë¼¼Êõר¼ÒµÄespaceÓïÒô£¬±»¸æÖªMAE-AccessÓòʹÓõÄǰ¶Ë¼¼Êõ¿ò¼ÜÐèÒª´ÓAngularJS1.xÇл»µ½React£¬ÒªÇó2020Äêµ×Íê³É¡£½Óµ½ÏûÏ¢µÄÎÒ£¬ÓÇϲ½»¼Ó£¬»ú»áÓëÌôÕ½²¢´æ£¬Õâ´Îǰ¶Ë¼¼Êõ¿ò¼ÜÇл»Ö®ÂÃÔÚËùÄÑÃ⣬µ«¸ÃÈçºÎ¿ªÊ¼£¬ÓÖ¸ÃÈçºÎ½áÊø¡£

ÎÊ£ºMAE-AccessÇл»Ç°¶Ë¼¼Êõ¿ò¼Ü£¬»ùÕ¾²úÆ·Èý²¿µÄFMA LTE£¬ÎªºÎÒ²¡°ÔÚËùÄÑÃ⡱£¿

Ô­Òò´óÌå¿ÉÒÔ×ܽáΪÒÔÏÂÈýµã£¬Èçͼ1-1Ëùʾ£º

1£©FMA LTEÒÔFMA LTE WebsiteºÍFMA LTE ServiceÁ½¸ö΢·þÎñ£¬¼¯³ÉÔÚMAE-AccessÉÏ£¬ÓëÕû¸öMAE-AccessÓòͳһ¹¹½¨¡£

2£©MAE-AccessÓòͳһΪ¸÷Website΢·þÎñÌṩǰ¶Ë¹¤³Ì»¯½â¾ö·½°¸£¬¸÷Website΢·þÎñͳһʹÓÃCloudsopƽ̨×ÔÑеÄǰ¶ËUI×é¼þ---eview ¡£Ò»·½ÃæÍ³Ò»Íø¹Ü¸÷UI½çÃæ·ç¸ñ£»ÁíÒ»·½Ãæ·½±ãͳһ¹ÜÀíǰ¶ËÏà¹ØµÄ¿ªÔ´¼°Èý·½¼þ£¬Í¬Ê±Ò²±ãÓÚͳһ¹¹½¨¡£

3£©CloudsopÌṩµÄeview×é¼þ£¬ÓлùÓÚangularJsǰ¶Ë¿ªÔ´¿ò¼ÜºÍreactǰ¶Ë¿ªÔ´¿ò¼ÜÁ½¸ö°æ±¾µÄ¡£angularJs°æµÄeviewÒòʹÓÃangularJs1.X£¬21Bºó±ã²»ÔÙÂú×㿪ԴÈý·½¼þÉúÃüÖÜÆÚ¹ÜÀíÒªÇó£¬ÐèҪͳһÇл»Îªreact°æµÄeview ¡£

ͼ1-1 ǰ¶Ë¼¼Êõ¿ò¼ÜÇл»Ô­Òò

2 ÂÃÐй¥ÂÔ

2.1 Ä¿µÄµØ¡ªReact¼¼Êõ¿ò¼Ü¼°Ç°¶Ë¹¤³Ì»¯

2.1.1 Webǰ¶Ë·¢Õ¹¼òÊ·

Õýʽ½éÉÜReactºÍǰ¶Ë¹¤³Ì»¯Ö®Ç°£¬Ïȼòµ¥Á˽âÏÂWebǰ¶Ë·¢Õ¹Ê·¡£Èçͼ2-1Ëùʾ£¬Webǰ¶Ë·¢Õ¹Ö÷Òª¾­Àú5¸ö¹Ø¼üʱ´ú¡£

ͼ2-1 Webǰ¶Ë·¢Õ¹¼òÊ·

¢Ù ¼òµ¥Ã÷¿ìµÄÔçÆÚʱ´ú£ºÊʺÏСÏîÄ¿£¬²»·Öǰºó¶Ë£¬Ò³ÃæÓÉJSP¡¢PHPµÈÔÚ·þÎñ¶ËÉú³É£¬ä¯ÀÀÆ÷¸ºÔðÕ¹ÏÖ¡£

¢Ú ºó¶ËΪÖ÷µÄMVCʱ´ú£ºÎªÁ˽µµÍ¸´ÔÓ¶È£¬ÒÔºó¶ËΪ³ö·¢µã£¬ÓÐÁËWeb Server²ãµÄ¼Ü¹¹Éý¼¶£¬±ÈÈçStructs¡¢Spring MVCµÈ¡£

¢Û Ajax´øÀ´µÄ SPA ʱ´ú£º2005ÄêAjaxÕýʽÌá³ö£¬Ç°¶Ë¿ª·¢½øÈëSPA£¨Single Page Application µ¥Ò³ÃæÓ¦Óã©Ê±´ú¡£

¢Ü ǰ¶ËΪÖ÷µÄMVC¡¢MV* ʱ´ú£ºÎªÁ˽µµÍǰ¶Ë¿ª·¢¸´ÔÓ¶È£¬Backbone¡¢EmberJS¡¢KnockoutJS¡¢AngularJS¡¢React¡¢VueµÈ´óÁ¿Ç°¶Ë¿ò¼ÜÓ¿ÏÖ¡£

¢Ý Node´øÀ´µÄȫջʱ´ú£ºËæ×ÅNode.jsµÄÐËÆð£¬ÎªÇ°¶Ë¿ª·¢´øÀ´Ò»ÖÖеĿª·¢Ä£Ê½¡£

×ݹÛ5¸öʱ´úµÄ±äǨ£¬Ã¿¸öºóʱ´ú¶¼ÔÚ³¢ÊÔ½â¾öǰʱ´úµÄÍ´µã¡£

1£©¢Ù¡¢¢Úʱ´ú£¬Ç°¶Ë¿ª·¢ÖضÈÒÀÀµ¿ª·¢»·¾³£»Ç°ºó¶ËÖ°ÔðÒÀ¾É¾À²ø²»Ç壬¿Éά»¤ÐÔÔ½À´Ô½²î¡£

2£©¢Ûʱ´ú£¬SPAÓ¦Óôó¶àÒÔ¹¦Äܽ»»¥ÐÍΪÖ÷£¬´æÔÚ´óÁ¿JS´úÂëµÄ×éÖ¯£¬Óë View ²ãµÄ°ó¶¨µÈ£¬¶¼²»ÊÇÈÝÒ×µÄÊÂÇ飬ÐèÒª½øÐÐǰ¶Ë¸ºÔð¶È¿ØÖÆ¡£

3£©¢Ü¡¢¢Ýʱ´ú£¬Ç°ºó¶ËÖ°ÔðÇåÎú£»Ç°¶Ë¿ª·¢¸´ÔӶȿɿأ¬Í¨¹ýºÏÀíµÄ·Ö²ã£¬ÈÃÏîÄ¿¸ü¿Éά»¤£»²¿ÊðÏà¶Ô¶ÀÁ¢£¬²úÆ·ÌåÑé¿ÉÒÔ¿ìËٸĽø¡£

2.1.2 React¼¼Êõ¿ò¼Ü

´ÓWebǰ¶Ë¼òÊ·À´¿´£¬ReactÆäʵÊÇǰ¶ËΪÖ÷µÄMVC¡¢MV* ʱ´úµÄ²úÎΪ½µµÍǰ¶Ë¿ª·¢¸´ÔӶȶøÉú¡£

React¹Ù·½½âÊÍReactÊÇÒ»¸öÓÃÓÚ¹¹½¨Óû§½çÃæµÄJavaScript¿â£¬¿ÉÒÔʹ´´½¨½»»¥Ê½UI±äµÄÇá¶øÒ×¾Ù¡£Í¨¹ýʹÓÃReact£¬¿ÉÒÔ´´½¨ÓµÓи÷ÖÖ״̬µÄ×é¼þ£¬ÔÙÓÉÕâЩ×é¼þ¹¹³É¸ü¼Ó¸´ÔÓµÄUI£¬×é¼þÂß¼­Ê¹ÓÃjavascript±àд¶ø·ÇÄ£°å(´Ë´¦²»Í¬ÓÚJSP¡¢PHP)£¬¿ÉÒÔÇáËɵØÔÚÓ¦ÓÃÖд«µÝÊý¾Ý£¬Ê¹µÃ״̬ÓëDOM·ÖÀë¡£

FMA·Ï³ýÔ­±¾jQuery+AngularJs1.x»ì´îµÄ¶àÒ³ÃæiframeǶÌ×ʵÏÖ£¬½øÐÐReact¼¼Êõ¿ò¼ÜµÄÇл»£¬ÖØÐ»®·Ö²¢×éÖ¯¸÷¸öUI×é¼þΪSAP£¬ÐèÒª¶ÔÕû¸öǰ¶Ë½øÐС°»»Ñª¡±Ê½ÖØÐ´¡£

2.1.3 ǰ¶Ë¹¤³Ì»¯

ΪÁ˸ßЧ¸ßÖÊÁ¿Íê³ÉWebÓ¦Óõĵü´úÉÏÏߣ¬³öÏÖÁËǰ¶Ë¹¤³Ì»¯½â¾ö·½°¸¼°Ïà¹Ø¼Ü¹¹Èçͼ2-1Ëùʾ¡£

ͼ2-2 ǰ¶Ë¹¤³Ì»¯¼Ü¹¹

¹¤³Ì»¯½â¾öµÄÎÊÌâÊÇ£¬ÈçºÎÌá¸ß±àÂë¡¢²âÊÔ¡¢Î¬»¤½×¶ÎµÄÉú²úЧÂÊ¡£Ç°¶Ë¹¤³Ì»¯Òª½â¾öµÄÎÊÌâ°üÀ¨£º

1£©Öƶ¨¸÷Ïî¹æ·¶£¬Èù¤×÷ÓÐÕ¿ÉÑ­£º±àÂë¹æ·¶Í³Ò»¡¢¿ª·¢Á÷³Ì¹æ·¶¡¢Ç°ºó¶Ë½Ó¿Ú¹æ·¶µÈ¡£

2£©Ê¹ÓúÏÊʵÄǰ¶Ë¼¼ÊõºÍ¿ò¼Ü£¬Ìá¸ßÉú²úЧÂÊ£º²ÉÓÃÄ£¿é»¯µÄ·½Ê½×éÖ¯´úÂë(ES6 Module)£»²ÉÓÃ×é¼þ»¯µÄ±à³Ì˼Ï룬´¦ÀíUI²ã£¨React£©£»½«Êý¾Ý²ã·ÖÀë¹ÜÀí£¨Redux£©£»Ê¹ÓÃÃæÏò¶ÔÏó»òÕߺ¯Êý±à³ÌµÄ·½Ê½×éÖ¯¼Ü¹¹¡£

3£©Ìá¸ß´úÂëµÄ¿É²âÊÔÐÔ£¬ÒýÈëµ¥Ôª²âÊÔ£¬Ìá¸ß´úÂëÖÊÁ¿¡£

4£©Í¨¹ýʹÓø÷ÖÖ×Ô¶¯»¯µÄ¹¤³Ì¹¤¾ß(Gulp/Webpack)£¬ÌáÉýÕû¸ö¿ª·¢¡¢²¿ÊðЧÂÊ¡£

FMA½øÐÐReact¼¼Êõ¿ò¼ÜÇл»µÄͬʱ£¬ÒýÈëÒµ½çÁ÷ÐеÄǰ¶Ë¹¤³Ì»¯½â¾ö·½°¸£¬ÒÔ×é¼þ»¯¡¢Ä£¿é»¯¡¢×Ô¶¯»¯¡¢¹æ·¶»¯µÈÊֶΣ¬ÌáÉý¿ª·¢¼°Î¬»¤Ð§ÂÊ¡£

×ÛÉÏËùÊö£¬·ÖÎö´Ë´Îǰ¶Ë¼¼Êõ¿ò¼ÜÇл»½«·¢ÉúµÄ±ä»¯£¬´Ó¢Û+¢Ü»ì´îµ½¢Ü+¢ÝÏà½áºÏ£¬ÔÙ¼ÓÉϼ¯³É×é¼þ/Ä£¿éµÄ±àÒë¹¹½¨¡¢¹æ·¶¼ì²é¡¢×Ô¶¯»¯³ÖÐø¼¯³É¡¢²¿ÊðΪһÌåµÄǰ¶Ë¹¤³Ì£¬ÊµÔòÊÇÕû¸ö²úÆ·Èí¼þ¹¤³Ì¼¼ÊõµÄת±äÓëÌáÉý¡£

2.2 ÓÎÍæÂ·Ïß¡ª¼¼Êõ¿ò¼ÜÇл»¹Ø¼ü²½Öè

2.2.1 ReactÏîÄ¿¹¤³Ì´î½¨

1£©ReactÏîÄ¿¹¤³Ì´î½¨£ºReact¹ÙÍøÌṩÁËÒ»Ì×´´½¨ReactÏîÄ¿µÄ½ÅÊּܹ¤³ÌCreate React App£¬¿ÉÒÔ¿ìËÙ´´½¨³öÒ»¸öеĵ¥Ò³ÃæµÄ¡¢ÇÒÒѾ­¼¯³ÉºÃ±ê׼ǰ¶Ë¹¹½¨Á÷Ë®ÏßµÄReactÏîÄ¿¹¤³Ì£¨¿Éͨ¹ýÐÞ¸ÄwebpackµÈ¹¹½¨¹¤¾ßµÄ²ÎÊýÅäÖã¬×Ô¶¨Òå´ò°ü¡¢¹¹½¨¡¢µ÷ÊÔ¹¤³Ì£©¡£

£¨1£©ÏÈÒª°²×°Nodejs£¨Ò»¸öjavascriptÔËÐл·¾³£©£¬ÉϹÙÍøÏÂÔØ²»Í¬²Ù×÷ϵͳµÄ°æ±¾£¬Ò»¼üʽ°²×°¼´¿É¡£

£¨2£©ÔÙͨ¹ýNodejsµÄ°ü¹ÜÀíÆ÷¹¤¾ßnpm£¬°²×°create-react-app½ÅÊּܹ¤¾ß£¨npm install -g create-react-app£©

£¨3£©ÔÚÐèÒª´´½¨ÏîÄ¿µÄλÖôò¿ªÃüÁîÐУ¬ÊäÈëcreate-react-app + ÏîÄ¿Ãû³ÆµÄÃüÁcreate-react-app myProject£©£¬½øÐÐÏîÄ¿´´½¨¡£

£¨4£©ÖÁ´Ë£¬ÏîÄ¿ÒѾ­´´½¨³É¹¦£¬¿ÉÒÔ½øÈëÏîÄ¿(cd myproject)£¬Ö±½ÓÆô¶¯£¨npm start£©¡£ Èç¹ûÐèÒª¹¹½¨³ö°ü£¬ÔòÖ´ÐУ¨npm build£©¡£ÐèҪעÒâµÄÊÇ£¬npm½Å±¾ÔÚ´´½¨ºÃµÄÏîÄ¿µÄpackge.jsonÎļþscriptÖпÉÒÔ×ÔÐнøÐÐÐ޸ĻòÀ©Õ¹¡£

2.2.2 ¿ª·¢ÊÓͼÉè¼Æ¼°×é¼þĿ¼¹æ»®

Òµ½ç±È½ÏÖ÷Á÷µÄÏà¶ÔͨÓõÄĿ¼½á¹¹ÈçϱíËùʾ¡£¾ßÌåÒµÎñ¿ª·¢Ê±£¬Ðè°´ÕÕÏÂÊö½á¹¹½øÐÐÒµÎñ±¾ÉíµÄĿ¼¼°Îļþ»®·Ö£¬»ù±¾ÉÏ×Ô¶¨Òåcomponents¼°contaninersÒÔϵÄĿ¼£¬½øÐÐ×é¼þ»®·Ö¼´¿É¡£

| index.js // Èë¿Újs
| router.js // ·ÓÉÈë¿Ú
| base.css // È«¾ÖÑùʽÎļþ
+---store //redux
| | store.js // redux store Èë¿Ú£¬´Ë´¦¿ÉÓÃÒÔ×¢²áÖмä¼þ
| | reducers.js // reducersÈë¿Ú
+---services //Êý¾Ý·ÃÎÊ £¨Í¨³£Îªapi£© ¸÷Óò°´ÐèʹÓ㬲»×öͳһҪÇó
+---contexts //contexts
+---utils //¹«Ó÷½·¨Âß¼­
+---assets //×ÊÔ´Îļþ
| +---i18n //¶àÓïÑÔ
| images //ͼƬ
| fonts //×ÖÌå×ÊÔ´
| media //ýÌå×ÊÔ´
+---constants //¹«Óó£Á¿ £¨Í¨³£Îªºó¶Ë¸÷ÖÖö¾Ù£©
+---components // ͨÓÃչʾ×é¼þĿ¼
| +---Header
| | index.j
| | Header.less
| \---NotFound
| index.js
\---containers // ÈÝÆ÷×é¼þĿ¼
| +---Todo // ÉùÃ÷Ò³ÃæµÄĿ¼
| | |---index.js // Ò³ÃæÈë¿Ú
| | +---components // Ò³ÃæÍ¨ÓÃ×é¼þ
| | | +---Button
| | | index.js
| | | Button.jsx //ÍÆ¼öÓ÷¨
| | | Button.less
| | | Button.stories.js
| | | +---Input
| | | index.js
| | | Input.jsx
| | | Input.less
| | | Input.stories.js
| | +---containers
| | | Search.js
| | | Body.js
| | +---store
| | types.js
| | action.js
| | reducer.js
\---test // ²âÊÔĿ¼ ºÍsrcĿ¼µÄ½á¹û±£³ÖÒ»ÖÂ
+---components // ͨÓÃչʾ×é¼þĿ¼
| +---Header
| | index.spec.js //¶Ôindex.jsµÄ²âÊÔÎļþ
\---containers
+---Todo
| +---components
| | +---Button
| | Button.spec.js //¶ÔButton.jsxµÄ²âÊÔÎļþ
| | +---Input
| | Input.spec.js //¶ÔInput.jsxµÄ²âÊÔÎļþ
| +---store
| reducer.spec.js //¶Ôreducer.jsµÄ²âÊÔÎļþ

2.2.3 ǰ¶Ë×é¼þÊáÀí»®·Ö

1£©×é¼þ»®·ÖÔ­Ôò

£¨1£©±ê×¼ÐÔ£ºÈκÎÒ»¸ö×é¼þ¶¼Ó¦¸Ã×ñÊØÒ»Ì×±ê×¼£¬¿ÉÒÔʹµÃ²»Í¬ÇøÓòµÄ¿ª·¢ÈËÔ±¾Ý´Ë±ê×¼¿ª·¢³öÒ»Ì×±ê׼ͳһµÄ×é¼þ

£¨2£©¶ÀÁ¢ÐÔ£ºÃèÊöÁË×é¼þµÄϸÁ£¶È£¬×ñÑ­µ¥Ò»Ö°ÔðÔ­Ôò£¬±£³Ö×é¼þµÄ´¿´âÐÔ£¬ÊôÐÔÅäÖõÈAPI¶ÔÍ⿪·Å£¬×é¼þÄÚ²¿×´Ì¬¶ÔÍâ·â±Õ£¬¾¡¿ÉÄܵÄÉÙÓëÒµÎññîºÏ¡£

£¨3£©¸´ÓÃÓëÒ×ÓãºUI²îÒ죬Ïû»¯ÔÚ×é¼þÄÚ²¿£¨×¢Òâ²¢²»ÊÇдһ¶Ñif/else£©£¬ÊäÈëÊä³öÓѺã¬Ò×ÓᣱÜÃⱩ¶×é¼þÄÚ²¿ÊµÏÖ£¬±ÜÃâÖ±½Ó²Ù×÷DOM£¬±ÜÃâʹÓÃref¡£

2£©×é¼þ·ÖÀ༰²ã´Î¹ØÏµ

£¨1£©»ù´¡×é¼þ£ºÎªÁ˸ü¹Ø×¢ÒµÎñÂß¼­µÄʵÏÖ£¬¿ÉÒÔ½áºÏ×ÔÉíÒµÎñ£¬Ñ¡ÔñÊʺϵijÉÊìµÄUI×é¼þ¿â£¬×÷ΪÕû¸öÏîÄ¿µÄ»ù´¡×é¼þ¿â¡£È磬FMAÑ¡ÔñÁËÆ½Ì¨ÌṩµÄeview UI×é¼þ¡£

£¨2£©ÈÝÆ÷ÐÍ×é¼þ£¨Container£©£ºÒ»¸öÈÝÆ÷ÐÔÖÊ×é¼þ£¬Ò»°ã×÷Ϊһ¸öÒµÎñ×ÓÄ£¿éµÄÈë¿Ú£¬ÈçFMAµÄ¹ÊÕÏ×ÜÀÀ×é¼þ£»ÈÝÆ÷×é¼þÄÚµÄ×Ó×é¼þͨ³£¾ßÓÐÒµÎñ»òÊý¾ÝÒÀÀµ¹ØÏµ£»¼¯ÖÐ/ͳһ½øÐÐ״̬¹ÜÀí£¬ÏòÆäËûչʾÐÍ/ÈÝÆ÷ÐÍ×é¼þÌṩÊý¾Ý£¨³äµ±Êý¾ÝÔ´£©ºÍÐÐΪÂß¼­´¦Àí£¨½ÓÊջص÷£©£»Èç¹ûʹÓÃÁËÈ«¾Ö״̬¹ÜÀí£¬ÄÇôÈÝÆ÷ÄÚ²¿µÄÒµÎñ×é¼þ¿ÉÒÔ×ÔÐе÷ÓÃÈ«¾Ö״̬´¦ÀíÒµÎñ£»³äµ±×Ó¼¶×é¼þͨÐŵÄ״̬ÖÐתվ£¬½øÐÐÒµÎñÄ£¿éÄÚ×Ó×é¼þµÄͨÐÅͳ³ï£¬Èç¹ÊÕÏ×ÜÀÀ×é¼þ£¬±£´æ×ÜÀÀ·ÖÎöµÄ½Ó¿ÚÏìÓ¦Êý¾ÝÏò×Ó×é¼þ´«µÝ£¬Í¬Ê±Ò²»á±£´æ×Ó×é¼þµ±Ç°µÄ½»»¥×´Ì¬£¬ÒÑЭµ÷ÓëÆäËü×Ó×é¼þÖ®¼äµÄ½»»¥Áª¶¯£»Ä£°æ»ù±¾¶¼ÊÇ×Ó¼¶×é¼þµÄ¼¯ºÏ£¬ºÜÉÙ°üº¬DOM±êÇ©¡£

£¨3£©Õ¹Ê¾ÐÍ×é¼þ£¨stateless£©£ºÖ÷Òª±íÏÖΪ×é¼þÊÇÔõÑùäÖȾµÄ£¬¾ÍÏñÒ»¸ö¼òµ¥µÄÄ£°æäÖȾ¹ý³Ì£»Ö»Í¨¹ýprops½ÓÊÜÊý¾ÝºÍ»Øµ÷º¯Êý£¬²»³äµ±Êý¾ÝÔ´£»¿ÉÄܰüº¬Õ¹Ê¾ºÍÈÝÆ÷×é¼þ ²¢ÇÒÒ»°ã»áÓÐDom±êÇ©ºÍcssÑùʽ£»Í¨³£ÓÃprops.children(react) »òÕßslot(vue)À´°üº¬ÆäËû×é¼þ£»¿ÉÒÔÓÐ״̬£¬Ö»ÔÚÆäÉúÃüÖÜÆÚÄÚ²Ù×ݲ¢¸Ä±äÆäÄÚ²¿×´Ì¬£¬Ö°Ôðµ¥Ò»£¬½«²»ÊôÓÚ×Ô¼ºµÄÐÐΪͨ¹ý»Øµ÷´«µÝ³öÈ¥£¬Èø¸¼¶×é¼þÈ¥´¦Àí¡£

£¨4£©ÒµÎñ×é¼þ£ºÍ¨³£ÊǸù¾Ý×îСҵÎñ״̬³éÏó¶ø³ö£¬ÓÐЩҵÎñ×é¼þÒ²¾ßÓÐÒ»¶¨µÄ¸´ÓÃÐÔ£¬µ«´ó¶àÊýÊÇÒ»´ÎÐÔ×é¼þ¡£

£¨5£©Í¨ÓÃ×é¼þ£º¿ÉÒÔÔÚÒ»¸ö»ò¶à¸öAPPÄÚͨÓõÄ×é¼þ¡£

£¨6£©Âß¼­×é¼þ£º²»°üº¬UI²ãµÄij¸ö¹¦ÄܵÄÂß¼­¼¯ºÏ£¬±ÈÈçFMAÖеÄʱ¼ä´¦Àí×é¼þ¡¢×Ö·û´®´¦Àí×é¼þµÈ¡£

£¨7£©¸ß½××é¼þ£¨HOC£©£ºÀà±Èº¯Êýʽ±à³ÌÖеÄ×éºÏ£¬¿ÉÒÔ¿´×öÒ»¸ö½ÓÊÕÆäËü×é¼þ×÷Ϊ²ÎÊý£¬²¢·µ»ØÒ»¸ö¹¦ÄÜÔöÇ¿µÄ×é¼þµÄº¯Êý¡£ÈçFMAÖеÄErrorBoundry×é¼þ¡£

£¨8£©¶àÊýWebÓ¦ÓõÄ×é¼þ²ã´Î¹ØÏµ£¬ÈçÏÂͼËùʾµÄÊ÷×´¹ØÏµ¡£

3£© FMA×é¼þ»®·Ö

ͨ³£¿É¸ù¾ÝÒµÎñ½øÐл®·Ö£¬»ò¸ù¾Ý¼¼Êõ½øÐл®·Ö¡£FMA¸ù¾ÝÒµÎñÉè¼Æ²¢¿ª·¢Ó¦ÓÃÖеÄ×é¼þÊ÷¡£

£¨1£©ÇиîÄ£°æ£¨Ò³Ãæ½á¹¹Ä£¿é»¯£©£ºÖ÷½çÃæÎªÈë¿ÚÈÝÆ÷×é¼þ£»Æä´Î£¬·Ö×óÓÒÁ½¸öÃæ°åÈÝÆ÷×é¼þ£»×óÃæ°å¸ù¾ÝÒµÎñ¹¦ÄÜ£¬·ÖΪÖ÷topoÒµÎñ×é¼þºÍ×Ô¶¨ÒåtopoÒµÎñ×é¼þ£»ÓÒÃæ°å¸ù¾ÝÒµÎñ¹¦ÄÜ£¬·ÖΪ¹ÊÕÏ×ÜÀÀ¡¢¿ìËÙ¹ÊÕÏÆ¥ÅäµÈÒµÎñ×é¼þ¡£ÒÔ´ËÀàÍÆ£¬´ÓÍâµ½ÄÚ¡¢´Ó´óµ½Ð¡¡¢·Ö²ã½øÐÐ×é¼þ»®·Ö£¬ÈçÏÂͼËùʾ¡£

£¨2£©Éè¼Æ²¢¿ª·¢Í¨ÓÃÒµÎñ×é¼þ£¬»ò»ù´¡×é¼þ£¬Ê¹µÃ×é¼þ¾¡¿ÉÄܸ´Óã¬ÈçFMAÌØÓеıí¸ñ×é¼þ¡¢»­Í¼×é¼þµÈ¡£

£¨3£©Ã÷È·¸÷¸ö×é¼þµÄ±ß½ç£¬ÄÚ²¿stateµÄÉè¼Æ£¬propsµÄÉè¼ÆÒÔ¼°ÓëÆäËû×é¼þµÄ¹ØÏµ

£¨4£©Ã÷È·¸÷¸ö×é¼þµÄ¶¨Î»ÓëÖ°ÄÜ»®·Ö£¬Éè¼ÆºÃ¸¸×Ó×é¼þ¡¢ÐÖµÜ×é¼þµÄͨÐÅ»úÖÆ

£¨5£©´î¼Ü×Ó£¬²¢¿ªÊ¼Ìî³ä

3 ²»Ò»ÑùµÄ·ç¾°

Á˽âÁËǰ¶Ë·¢Õ¹Ê·¡¢´î½¨ºÃÁËReactÏîÄ¿¹¤³Ì¡¢»®·ÖºÃÁË×é¼þ£¬ÄÇôÈçºÎдһ¸öReactµÄ×é¼þ£¿

3.1 µ¥¸ö×é¼þĿ¼

Ê×ÏÈ£¬¶ÔÓÚµ¥¸ö×é¼þÀ´Ëµ£¬±ê×¼µÄ×é¼þĿ¼ҪÓУ¬µ«¿Éͨ¹ý×é¼þ·ÖÀà½øÐÐĿ¼²Ã¼ô¡£´´½¨Ò»¸ö×é¼þ£¬ÐèÒª½¨Ò»¸öµ¥¶ÀµÄÎļþ¼Ð¡£Îļþ¼Ðͨ³£°üº¬Ö÷ÎļþÈë¿Úindex.js(ÊÓͼ²ãµÄÂß¼­)£»Ñùʽ²ÉÓõÄÊÇscss»òless cssÔ¤±àÒëÓïÑÔ£¬Ð´ÔÚmodule.scss/module.lessÖУ¬webpack»á×Ô¶¯°Ñscss»òless±àÒë³ÉcssÎļþ£¬²¢ÇÒ»á½â¾öµôä¯ÀÀÆ÷¼æÓõIJîÒ죻³£Á¿µÄ¶¨ÒåΪtype.js£»Âß¼­´¦Àíµ÷Óýӿں¯ÊýдÔÚactions.jsÖУ»Èç¹ûÐèҪʹÓÃredux,¶¨ÒåÔÚreducers.jsÎļþÖУ»Èç¹û¸Ã×é¼þ°üº¬ÆäËüÒµÎñ×é¼þ£¬¿ÉÖ±½ÓǶÌ×Ò»¸öеÄ×é¼þÎļþ¼Ð¡£È磬ÏÂÃæµÄ¸¨Öú»Ö¸´ÒµÎñ×é¼þĿ¼¡£

3.2 ×é¼þÖ÷Îļþindex.jsµÄ»ù±¾½á¹¹

Line 01£ºimport React, {Component} from 'react';

Line 02£ºimport Spinner from '@huawei/eview-react/Spinner';

Line 03£ºimport {injectIntl} from 'react-intl';

Line 04£ºimport './module.css';

Line 05£ºimport {getTotalPrice} from './actions'

Line 06£ºclass LeftPanel extends Component {

Line 07£º constructor(props) {

Line 08£º super(props);

Line 09£º this.state = {

Line 10£º message: '',

Line 11£º totalPrice: 0,

Line 12£º appleNumber: 0

Line 13£º }

Line 14£º this.applePrice = 2;

Line 15£º }

Line 16£º componentWillMount() {

Line 17£º this.setState({message: '×ó±ß×é¼þ³õʼ»¯Íê³É£¡'});

Line 18£º }

Line 19£º getDom = (dom) => {

Line 20£º }

Line 21£º onBuyApple = (value) => {

Line 22£º const totalPrice = getTotalPrice(value, this.applePrice);

Line 23£º this.setState({appleNumber: value, totalPrice});

Line 24£º }

Line 25£º render() {

Line 26£º return (

Line 27£º <div className={"ev_layout_fix left-panel"} ref={this.getDom}>

Line 28£º {this.state.message}

Line 29£º Æ»¹ûµÄµ¥¼Û:{this.applePrice}£¤

Line 30£º ¹ºÂòµÄÆ»¹ûµÄÊýÁ¿:<Spinner

Line 31£º value={this.state.appleNumber}

Line 32£º min={0}

Line 33£º max={100}

Line 34£º step={1}

Line 35£º onChange={this.onBuyApple}/>

Line 36£º ¹²»¨È¥£º{this.state.totalPrice}£¤

Line 37£º

Line 38£º </div>

Line 39£º )

Line 40£º }

Line 41£º}

1£©line01-05ÒýÈëreact¿â£ºimport React, {Component} from 'react';°üÀ¨ÒýÈëµÄÐèÒªµÄµÚÈý·½µÄ×é¼þ£¬×Ô¼º¶¨ÒåµÄ×é¼þ¡¢º¯Êý¡¢³£Á¿¡¢cssÎļþ¡¢Í¼Æ¬µÈ¾²Ì¬×ÊÔ´ÎļþµÈ¡£

2£©line06-41½øÐÐ×é¼þÀàÉùÃ÷ʵÏÖ£ºjavascriptÆäʵÊÇûÓÐÀàµÄ¸ÅÄîµÄ£¬es6µÄclassÆäʵÊÇÒ»ÖÖÓï·¨ÌÇ£¬±¾ÖÊÊǹ¹Ô캯ÊýFunction¡£Constructor¿ÉÒÔÊ¡ÂÔ£¬²»Ð´Ò²»áĬÈÏ´æÔÚ£¬½¨ÒéÔÚÓÐ״̬×é¼þÏÂÖÐÌí¼Ó£¬È»ºóÔÚConstructor×ö³õʼ»¯µÄ¹¦ÄÜ¡£

3£©line25-40 renderº¯ÊýÏ൱ÓÚÎÒÃÇangularjsÖеÄtemplate,ÓÃÀ´äÖȾµ½ä¯ÀÀÆ÷ÉÏÃæµÄÊÓͼ¡£ÐèҪעÒâµÄÊÇ£¬ÕâÀïʹÓõÄÊÇReact jsxÓï·¨£¬Ñùʽ¶¨ÒåʹÓÃclassNameÊôÐÔ¶ø·Çclass£¬styleµÄ¶¨Òå¸ñʽΪstyle={{marginLeft:¡¯2rem¡¯}}£¬×îÖÕreturnµÄÔªËØÓÐÇÒ½öÓÐÒ»¸öElement¡£

4£©view²ã±äÁ¿µÄ¶¨ÒåÓë¸üÐÂÊǹ̶¨µÄ¡£·ÖΪ×Ô¶¯´¥·¢ÊÓͼ²ã¸üкͲ»´¥·¢ÊÓͼ²ã¸üÐÂÁ½ÖÖ¡£×Ô¶¯´¥·¢ÊÓͼ²ã¸üÐÂÏà¹ØµÄstate±äÁ¿£¬³õʼ»¯¶¨ÒåÈçline09-13£¬state±äÁ¿ÖØÐ¸³ÖµÈçline17£¬±ØÐëʹÓÃsetStateº¯Êý¡£ÆäËû²»´¥·¢ÊÓͼ²ã¸üеıäÁ¿Ö±½Ó¶¨Òå¼´¿É¡£

5£©reactÌṩÁË×é¼þÔÚ½øÐгõʼ¼ÓÔØ£¬²ÎÊý±ä¸ü£¬×¢ÏúµÈ¶¯×÷ʱµÄ¹³×Óº¯Êý£¨Òà³ÆÉúÃüÖÜÆÚº¯Êý£©£¬ÀàËÆangularjsÖеÄ$onInit¡¢$onChange¡¢$postLink¡£ÆäÖУ¬componentWillMount·½·¨ÔÚmountingºÍrender()֮ǰµ÷Óã¬Òò´ËÔÚ´Ë·½·¨ÖÐsetState²»»á´¥·¢ÖØÐÂäÖȾ£¬ËùÒÔ¿ÉÒÔÔÚÕâ¸öÖÜÆÚʹÓÃsetStateÀ´¸ü¸ÄstateÖµ£»componentWillReceiveProps·½·¨ÔÚÒ»¸ömountedµÄ×é¼þ½ÓÊÕµ½²¢¸³ÖµÐÂpropsǰ±»µ÷Óã¬Èç¹ûÎÒÃÇÐèҪͨ¹ýpropÀ´¸üÐÂstate£¬¿ÉÒÔÔÚ´Ë·½·¨ÖбȽÏthis.propsºÍnextProps²»ÏàµÈʱ£¬ÔÙʹÓÃthis.setStateÀ´¸ü¸Ästate£¬ÒԴ˼õÉÙ×é¼þµÄ²»±ØÒªäÖȾ´ÎÊý£¬´ïµ½ÐÔÄÜÓÅ»¯µÄÄ¿µÄ¡£

6£©Í¼Æ¬µÈ¾²Ì¬×ÊÔ´µÄÒýÓúÍ×é¼þµÄÒýÓÃÊÇÒ»ÑùµÄ£¬Í¨¹ýimport¹Ø¼ü×Ö½øÐе¼È룬ͨ¹ýÊôÐÔ±äÁ¿½øÐÐÒýÓá£ÈçImport iconImg from ¡®Í¼Æ¬Â·¾¶¡¯£» <img src={iconImg} alt=¡±¡± />¡£Í¼Æ¬×ÊÔ´½¨ÒéÖ±½Ó´æ·Åµ½µ±Ç°µÄ×é¼þĿ¼ÏÂÃæ£¬±ÜÃâÒýÓÃĿ¼̫Éî¡£

3.3 ×é¼þ¹ú¼Ê»¯

1£©Ê¹ÓõÚÈý·½²å¼þreact-intl

2£©×ÊÔ´ÅäÖ㺴´½¨i18nĿ¼£¬ÅäÖùú¼Ê»¯×ÊÔ´Îļþ¡£

3£©×ÊÔ´³õʼ»¯ÓëÓ¦ÓãºÔÚÏîÄ¿Èë¿ÚµÄindex.jsÎļþÖÐÒýÈë import { injectIntl } from 'react-intl'; ÔÚrenderÖÐÌí¼Ó <IntlProvider locale={ lang .locale} messages = { lang.messages } > </IntlProvider> ¡£Locale²ÉÓõÄÊÇÓïÑÔ£¬messages£¬ÐèÒª¹ú¼Ê»¯µÄÓïÑÔÅäÖá£

Line 01£º import { lang, messages } from './asserts/i18n/index';

Line 02£º import App from './containers/MainContainer';

Line 03£º const rootNode = document.getElementById('root');

Line 04£ºReactDOM.render(

Line 05£º <IntlProvider locale={ lang.locale} messages={ lang.messages}>

Line 06£º <Provider store={store}>

Line 07£º <div style={{ height: '100%', width: '100%'

Line 08£º <App />

Line 09£º </div>

Line 10£º </Provider>

Line 11£º </IntlProvider>,

Line 12£º rootNode

Line 13£º);

4£©µ¼³ö¹ú¼Ê»¯×é¼þexport default injectIntl(×é¼þÃû);

5£©ÔÚ×é¼þµÄ¾ßÌ庯ÊýÖУ¬Ê¹Óùú¼Ê»¯×ÊÔ´ÏîÈçline01-02

Line 01£º const { intl } = this.props;

Line 12£º const loadingWaitLabel = intl.formatMessage({ id: 'loadingWait' })

3.4 ºǫ́Êý¾ÝÇëÇó

ºǫ́Êý¾ÝÇëÇóʹÓõÚÈý·½×é¼þaxios£¨Ò»¸ö»ùÓÚpromiseµÄHTTP¿â£¬¿ÉÒÔÓÃÔÚä¯ÀÀÆ÷ºÍ node.jsÖУ©¡£

1£©axiosÌØÐÔ£º´Óä¯ÀÀÆ÷Öд´½¨ XMLHttpRequests£»´Ó node.js ´´½¨ http ÇëÇó£»Ö§³ÖPromise API£»À¹½ØÇëÇóºÍÏìÓ¦£»×ª»»ÇëÇóÊý¾ÝºÍÏìÓ¦Êý¾Ý£»È¡ÏûÇëÇó£»×Ô¶¯×ª»» JSON Êý¾Ý£»¿Í»§¶ËÖ§³Ö·ÀÓù XSRF¡£

2£©axiosÇëÇóʵÀý£º

£¨1£©get

// Ϊ¸ø¶¨ ID µÄ user ´´½¨ÇëÇó

axios.get('/user?ID=12345')

.then(function (response) {

console.log(response);

})

.catch(function (error) {

console.log(error);

});

£¨2£©Post

axios.post('/user', {

firstName: 'Fred',

lastName: 'Flintstone'

})

.then(function (response) {

console.log(response);

})

.catch(function (error) {

console.log(error);

});

£¨3£©Ö´Ðжà¸ö²¢·¢ÇëÇó

function getUserAccount() {

return axios.get('/user/12345');

}

function getUserPermissions() {

return axios.get('/user/12345/permissions');

}

axios.all([getUserAccount(), getUserPermissions()])

.then(axios.spread(function (acct, perms) {

// Á½¸öÇëÇóÏÖÔÚ¶¼Ö´ÐÐÍê³É

}));

3.5 ReduxʹÓÃ

3.5.1 ʲôʱºòRedux

ReduxµÄ×÷ÓþÍÊÇΪÁ˽â¾öƽÐÐ×é¼þ£¬»òÕßûÓи¸×Ó¹ØÏµ×é¼þµÄÖ®¼äµÄͨÐÅ¡£Òò´Ë£¬µ±Á½¸ö×é¼þÎÞ·¨Í¨¹ý״̬ÌáÉý£¬½«Í¨ÐÅÏûϢͨ¹ý¸¸×é¼þ½øÐÐÖÐתʱ£¬¾ÍÐèҪʹÓÃRedux¼¼Êõ½øÐÐÏûϢͨÐÅ¡£

3.5.2 ReduxÅäÖÃʹÓÃ

1£©¶¨ÒåstoreÎļþ²¢½øÐÐstoreÊ÷¹Ò½Ó¡£

import {combineReducers} from 'redux';

import {routerReducer} from 'react-router-redux';

import leftPanelReducer from './containers/Home/LeftPanelContainer/reducers';

export default combineReducers({router: routerReducer, leftPanel: leftPanelReducer});

2£©Ó¦ÓÃÈë¿Úindex.jsÈ«¾ÖstoreÉÏÏÂÎÄÅäÖã¬<Provider store={store}></Provider>

3£©leftPanelReducer.js¶¨Ò壺types.js+reducers.js+actions.js

£¨1£©types.js

const ACTION_TYPE = {

SET_CAT_NAME: 'SET_CAT_NAME '

};

export { ACTION_TYPE };

£¨2£©Reducers.js

import { ACTION_TYPE } from './types';

const initState = {

catName: ¡°ketty¡±

}

};

export default (state = initState, action) => {

switch (action.type) {

case ACTION_TYPE.SET_CAT_NAME: {

return {

...state,

catName: action.data

};

}

default: {

return state;

}

}

};

£¨3£©actions.js

import { ACTION_TYPE } from './types';

export const setCatName= catName => dispatch => {

dispatch({

type: ACTION_TYPE.SET_CAT_NAME,

data: catName

});

};

4£©Ê¹ÓÃredux´«µÝÈ«¾ÖÊý¾Ý£¬Í¨ÖªËùÓнÓÊÕ·½È«¾ÖÊý¾ÝµÄ¸üÐÂ

£¨1£©Ê×ÏÈÔÚ´«µÝÊý¾Ý×é¼þÖÐÒýÈëreduxÏà¹Ø×é¼þ£¬¼°ÐÞ¸ÄÈ«¾ÖÊý¾ÝµÄº¯ÊýsetCatName

import {combineReducers} from 'redux';

import { connect } from 'react-redux ';

import { setCatName } from './actions;

£¨2£©µ¼³ö×é¼þʱ£¬Ê¹ÓÃconnectÖмä¼þ½øÐÐ×é¼þÊôÐÔºÍÈ«¾Östore¹ØÁª£¬´ËʱsetCatNameº¯ÊýÏ൱ÓÚ¹ÒÔÚthis.propsÉÏ£¬Ê¹ÓÃʱֱ½Óµ÷ÓÃthis.props.setCatName (name)£¬½øÐÐÈ«¾ÖÊý¾ÝµÄÐ޸ĸüУ¬Í¨Öª¶¯×÷ÔòÓÉÕû¸öRedux»úÖÆÖ´ÐС£

const mapDispatchToProps = dispatch => bindActionCreators({

setCatName

}, dispatch);

export default connect(null, mapDispatchToProps)(injectIntl(LeftPanel))

5£©Ê¹ÓÃredux¼àÌýÈ«¾ÖÊý¾ÝµÄ¸üУ¬½ÓÊÜ×îÐÂÖµ£¬ÀàËÆÓÚÊý¾Ý´«µÝ¡£

£¨1£©Ê×ÏÈÔÚ×é¼þÖÐÒýÈëreduxÏà¹Ø×é¼þ£¬

import {combineReducers} from 'redux';

import { connect } from 'react-redux ';

£¨2£©µ¼³ö×é¼þʱ£¬Ê¹ÓÃconnectÖмä¼þ½øÐÐ×é¼þÊôÐÔºÍÈ«¾Östore¹ØÁª£¬´Ëʱȫ¾ÖÊý¾ÝcatName¹ÒÔÚÁËthis.propsÉÏ£¬Ê¹ÓÃʱֱ½Óµ÷ÓÃthis.props.catName£¬Êý¾ÝµÄ¼°Ê±ÐÔÓÉÕû¸öRedux»úÖÆ±£ÕÏ¡£

const mapStateToProps = state => ({catName: state.leftPanel.catName});

export default connect(mapStateToProps)(injectIntl(LeftPanel))

4 µ½´ïÖÕµãºóµÄÒâÍâÊÕ»ñ

4.1 ÀúÊ·Õ®Îñ

1£©AngularJs(²»Âú×ãÉúÃüÖÜÆÚ¹ÜÀíÒªÇó)/ jQuery¿ò¼Ü»ì´î£»

2£©ÔÚÏß·ÖÎöģʽºÍµ¼³ö±¨¸æÀëÏß·ÖÎöģʽԴÂë·Ö¾ÓÁ½¸ö´úÂë²Ö£»

3£©¶à¸ö¹¦ÄÜÄ£¿é400+º¯ÊýСº¯Êý¶Ñ»ý³É¡°ÉϵÛÀࡱ£¬´úÂëÖØ¸´ÂÊ44%£¬ÏàͬҵÎñÂß¼­µÄÔö¼Ó¡¢É¾³ý¡¢Ð޸ĵÈÀ©Õ¹Î¬»¤¹¤×÷£¬´æÔÚÖØ¸´ÀͶ¯¡¢ÐÞ¸ÄÒÅ©ÒýÈëȱÏݵÈÎÊÌâ¡£

4.2 ÎÞÕ®Ò»ÉíÇá

ÔÚÇл»Ç°¶Ë¼¼Êõ¿ò¼Ü£¨React¡¢µ¥Ò³Ãæ¡¢UI×é¼þ»¯£©µÄ±³¾°Ï£¬½øÐÐÒÔϼ¸µãÖØ¹¹£¬ÔÚÏßµ¼³öÔ´Âë¹²²Ö¡¢ÏàͬҵÎñ¹¦Äܹ²ÓÃÒµÎñ×é¼þ£¬´úÂëÖØ¸´ÂÊ´Ó44%½µµÍµ½4.8%£¬¼õÉÙÖØ¸´´úÂë1W+¡£

1) Ó¦Óá°MVC·Ö²ãÔ­Ôò¡±£¬½«Êý¾Ý·â×°±£´æ£¨model£©¡¢ÒµÎñÂß¼­£¨controller£©¡¢½çÃæÏÔʾ£¨controller£©½øÐпª·¢ÊÓͼ·Ö²ã¹éÀ࣬Èçͼ2-1Ëùʾ£»

2) Ó¦Óá°µ¥Ò»Ö°ÔðÔ­Ôò¡±ÒÔ¼°¡°×îÉÙÖªµÀ¡±Ô­Ôò£¬¶Ô¡°ÉϵÛÀࡱ½øÐÐÊáÀí²ð·Ö£¬½«Æ½ÆÌ¶Ñ»ýµÄ¹¦Äܺ¯Êý£¬°´¹¦ÄÜÖ°Ô𣬳éÈ¡·â×°³ÉÒ»¸ö¸ö¸ßÄÚ¾ÛµÍñîºÏµÄ¿É²å°ÎµÄ×é¼þÀࡣͬʱ°´ÕÕ×é¼þ¹¦ÄÜ£¬½øÒ»²½·Ö×é¹éÀàΪƫµ×²ãµÄ»ù´¡×é¼þ¡¢Æ«ÉϲãµÄÒµÎñ×é¼þ¡¢ÒÔ¼°ÓÃÀ´½øÐÐÊý¾Ý´¦ÀíµÄ¹¤¾ß×é¼þ¡£ÉϲãÒµÎñ×é¼þ¿É°´Ðè¡°×éºÏ¡±Ê¹ÓÃÆäËûÒµÎñ×é¼þ»ò»ù´¡×é¼þ¡£ÔÚÏß·ÖÎö

ºÍµ¼³ö±¨¸æ×é¼þ£¬Í¬Àí°´Ðè×éºÏʹÓø÷ÒµÎñ×é¼þ»ò»ù´¡×é¼þ£¬Èçͼ2-1¡¢2-2Ëùʾ¡£

ͼ2-1 ¿ª·¢ÊÓͼ·Ö²ã

ͼ2-2 ×é¼þ²ð·Ö

3£©ÎªÊ¹µ¼³öºÍÔÚÏß×î´óÏ޶ȵØÍ¨ÓÃÒµÎñ×é¼þ£¬¶ÔÀ´Ô´²»Í¬¡¢Êý¾Ý½á¹¹²»Í¬µÄÊý¾Ý£¬´«ÈëÒµÎñ×é¼þǰ½øÐÐÊý¾Ý±ê×¼»¯¡¢¹éÒ»»¯¡£

ͼ2-3 ×é¼þÊý¾Ý±ê×¼»¯¡¢¹éÒ»»¯

5 ºó¼Ç

±¾´Îǰ¶Ë¼¼Êõ¿ò¼ÜÇл»£¬ÊÂÎñ±¾Éí±È½Ï±»¶¯£¬ºÃÔÚÄܹ»Ö÷¶¯Ê¶±ð½»¸¶Äѵ㡣ÌáǰÊáÀí¹¤×÷Á¿£¬Ö÷¶¯¹ÜÀíÇл»¹ý³Ì¡£×îÖÕ£¬¼°Ê±¡¢ÓÐЧ¡¢¸ßÖÊÁ¿Íê³É½»¸¶£¬È·±£FMAǰ¶Ë¿ªÔ´×é¼þÂú×ãÉúÃüÖÜÆÚ¹ÜÀíÒªÇóµÄͬʱ£¬ÌáÉýFMA×éǰ¶ËÈí¼þ¼¼Êõ£¬´ÓÎÞµ½Óн¨Á¢FMAǰ¶Ë¹¤³Ì»¯ÄÜÁ¦¡£

1£©½áºÏ½»»¥½çÃæ¿òͼ£¬½«¹¦ÄÜÄ£¿éµÄÒµÎñÂß¼­¼°½»»¥½çÃæ£¬½øÐÐ×é¼þ»¯·â×°ºó£¬ÔÚÏߺ͵¼³ö·ÖÎöģʽ¿É¸ß¶ÈͨÓÃÒµÎñ×é¼þ£¬²»ÔÙÐèҪͬʱ¶ÔÁ½Ì×´úÂ룬½øÐÐÏàͬ»òÏàËÆ¹¦ÄܵãµÄ¿ª·¢Î¬»¤£¬±ÜÃâÖØ¸´¡°ÔìÂÖ×Ó¡±£¬Ìá¸ß¿ª·¢Ð§ÂÊ£¬ÌáÉý¿Éά»¤ÐÔ¡¢Ò×ά»¤ÐÔ£¬Í¬Ê±£¬±ÜÃâÒò´úÂëÐ޸ĩºÏ£¬ÒýÈ빦ÄÜȱÏÝ¡£

2£©ÒµÎñ×é¼þµÄÉè¼Æ¿ª·¢£¬¿É¸ß¶ÈÄÚ¾Û£¬Ê¹Æä¹¦Äܵ¥Ò»£¬Ò×ά»¤¡£ÇÒ¶àÈËЭͬ¿ª·¢Í¬Ò»¹¦ÄÜÄ£¿éʱ£¬¿É°´Ð¡Á£¶ÈµÄUI×é¼þ½øÐÐÈÎÎñ»®·Ö£¬²¢Ðпª·¢£¬Ô´ÂëÉÏ¿âÒ²²»Ò×Ôì³É³åÍ»£¬Ìá¸ß¿ª·¢ÖÊÁ¿¼°Ð§ÂÊ¡£

 

 

 
   
3575 ´Îä¯ÀÀ       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¿ª·¢Æ½Ì¨×î¼Ñ