±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉܽéÉÜǰ¶Ë·¢Õ¹Ê·£¬²¢´î½¨ºÃ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×é¼þ½øÐÐÈÎÎñ»®·Ö£¬²¢Ðпª·¢£¬Ô´ÂëÉÏ¿âÒ²²»Ò×Ôì³É³åÍ»£¬Ìá¸ß¿ª·¢ÖÊÁ¿¼°Ð§ÂÊ¡£
|