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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
¾©¶« Taro ¿ò¼ÜÉî¶Èʵ¼ù
 
  12280  次浏览      27
  2018-12-11
 
±à¼­ÍƼö:
±¾ÎÄÀ´×Ôinfoq£¬±¾ÎÄÏÈ̸ÁË Taro ΪʲôѡÔñʹÓà React Óï·¨£¬È»ºóÔÙ´ÓTaro ÏîÄ¿µÄ´úÂë×éÖ¯¡¢Êý¾Ý״̬¹ÜÀí¡¢ÐÔÄÜÓÅ»¯ÒÔ¼°¶à¶Ë¼æÈÝÕ⼸¸ö·½ÃæÀ´²ûÊöÁË Taro µÄÉî¶È¿ª·¢Êµ¼ùÌåÑé¡£

ǰÑÔ

Taro Êǰ¼Í¹ÊµÑéÊÒ×ñÑ­ React Óï·¨¹æ·¶µÄ¶à¶Ë¿ª·¢·½°¸£¬Taro ĿǰÒѶÔÍ⿪Դһ¶Îʱ¼ä£¬Êܵ½ÁËǰ¶Ë¿ª·¢ÕߵĹ㷺»¶Ó­ºÍ¹Ø×¢¡£½ØÖ¹Ä¿Ç° star ÊýÒѾ­Í»ÆÆ 11.2k£¬»¹ÔÚ¿ªÆôµÄ Issues ´ï 200 ¶à¸ö£¬ÒѾ­¹Ø±Õ 700 ¶à¸ö£¬¿É¼ûʹÓò¢²ÎÓëÌÖÂ۵Ŀª·¢ÕßÊǷdz£¶àµÄ¡£Taro ĿǰÒѾ­Ö§³Ö΢ÐÅС³ÌÐò¡¢H5¡¢RN¡¢Ö§¸¶±¦Ð¡³ÌÐò¡¢°Ù¶ÈС³ÌÐò£¬³ÖÐøµü´úÖÐµÄ Taro£¬Ò²ÕýÔÚ¼æÈݸü¶àµÄ¶ËÒÔ¼°Ôö¼ÓһЩÐÂÌØÐÔµÄÖ§³Ö¡£

»Ø¹éÕýÌ⣬±¾ÆªÎÄÕÂÖ÷Òª½²µÄÊÇ Taro Éî¶È¿ª·¢Êµ¼ù£¬×ÛºÏÎÒÃÇÔÚʵ¼ÊÏîÄ¿ÖÐʹÓà Taro µÄһЩ¾­ÑéºÍ×ܽᣬÊ×ÏÈ»á̸̸ Taro ΪʲôѡÔñʹÓà React Óï·¨£¬È»ºóÔÙ´ÓTaro ÏîÄ¿µÄ´úÂë×éÖ¯¡¢Êý¾Ý״̬¹ÜÀí¡¢ÐÔÄÜÓÅ»¯ÒÔ¼°¶à¶Ë¼æÈݵȼ¸¸ö·½ÃæÀ´²ûÊö Taro µÄÉî¶È¿ª·¢Êµ¼ùÌåÑé¡£

ΪʲôѡÔñʹÓà React Óï·¨£¿

Õâ¸öÒª´ÓÁ½¸ö·½ÃæÀ´Ëµ£¬Ò»ÊÇС³ÌÐòÔ­ÉúµÄ¿ª·¢·½Ê½²»¹»ÓѺ㬻òÕß˵²»¹»¹¤³Ì»¯£¬ÔÚ¿ª·¢Ò»Ð©´óÐÍÏîĿʱ¾Í»áÏԵúܳÔÁ¦£¬Ö÷ÒªÌåÏÖÔÚÒÔϼ¸µã£º

1.Ò»¸öС³ÌÐòÒ³Ãæ»ò×é¼þ£¬ÐèҪͬʱ°üº¬ 4 ¸öÎļþ£¬ÒÔÖÁ¿ª·¢Ò»¸ö¹¦ÄÜÄ£¿éʱ£¬ÐèÒª¶à¸öÎļþ¼äÀ´»ØÇл»£»

2.ûÓÐ×Ô¶¨ÒåÎļþÔ¤´¦Àí£¬ÎÞ·¨Ö±½ÓʹÓà Sass¡¢Less ÒÔ¼°½ÏÐ嵀 ES Next Óï·¨£»

3.×Ö·û´®Ä£°åÌ«¹ýåîÈõ£¬Ð¡³ÌÐòµÄ×Ö·û´®Ä£°å·ÂµÄÊÇ Vue£¬µ«ÊÇûÓÐÌṩ Vue ÄÇô¶àµÄÓï·¨ÌÇ£¬µ±ÊµÏÖһЩ±È½Ï¸´ÔӵĴ¦Àíʱ£¬Ð´ÆðÀ´¾Í·Ç³£Âé·³£¬ËäÈ»ÌṩÁË wxs ×÷Ϊ²¹³ä£¬µ«ÊÇʹÓÃÌåÑ黹ÊǷdz£Ôã¸â£»

ȱ·¦²âÊÔÌ×¼þ£¬ÎÞ·¨±àд²âÊÔ´úÂëÀ´±£Ö¤ÏîÄ¿ÖÊÁ¿£¬Ò²¾Í²»ÄܽøÐгÖÐø¼¯³É£¬×Ô¶¯»¯´ò°ü¡£

Ô­ÉúµÄ¿ª·¢·½Ê½²»ÓѺã¬×ÔÈ»¾ÍÏëÒªÓиü¸ßЧµÄÌæ´ú·½°¸¡£ËùÒÔÎÒÃǽ«Ä¿¹âͶÏòÁËÊÐÃæÉÏÁ÷ÐеÄÈý´óǰ¶Ë¿ò¼ÜReact¡¢Vue¡¢Angular ¡£AngularÔÚ¹úÄÚµÄÁ÷Ðг̶Ȳ»¸ß£¬ÎÒÃÇÊ×ÏÈÅųýÁËÕâÖÖÓï·¨¹æ·¶¡£¶øÀà Vue µÄС³ÌÐò¿ª·¢¿ò¼ÜÊÐÃæÉÏÒѾ­ÓÐһЩÓÅÐãµÄ¿ªÔ´ÏîÄ¿£¬Í¬Ê±ÎÒÃDz¿ÃÅÄڵļ¼ÊõÕ»Ö÷ÒªÊÇ React£¬ÄÇô React Óï·¨¹æ·¶ Ò²×ÔÈ»³ÉΪÁËÎÒÃǵĵÚһѡÔñ¡£³ý´ËÖ®Í⣬ÎÒÃÇ»¹ÓÐÒÔϼ¸µãµÄ¿¼ÂÇ£º

React Ò»Ãŷdz£Á÷ÐеĿò¼Ü£¬Ò²Óйã´óµÄÊÜÖÚ£¬Ê¹ÓÃËüÒ²ÄܽµµÍС³ÌÐò¿ª·¢µÄѧϰ³É±¾£»

С³ÌÐòµÄÊý¾ÝÇý¶¯Ä£°å¸üеÄ˼ÏëÓëʵÏÖ»úÖÆ£¬Óë React ÀàËÆ£»

React ²ÉÓà JSX ×÷Ϊ×ÔÉíÄ£°å£¬JSX Ïà±È×Ö·û´®Ä£°åÀ´Ëµ¸ü¼Ó×ÔÓÉ£¬¸ü×ÔÈ»£¬¸ü¾ß±íÏÖÁ¦£¬²»ÐèÒªÒÀÀµ×Ö·û´®Ä£°åµÄ¸÷ÖÖÓï·¨ÌÇ£¬Ò²ÄÜÍê³É¸´ÔӵĴ¦Àí£»

React ±¾ÉíÓпç¶ËµÄʵÏÖ·½°¸ ReactNative£¬²¢Çҷdz£³ÉÊ죬ÉçÇø»îÔ¾£¬¶ÔÓÚ Taro À´ËµÓиü¶àµÄ¶à¶Ë¿ª·¢¿ÉÄÜÐÔ¡£

×ÛÉÏËùÊö£¬Taro ×îÖÕ²ÉÓÃÁË React Óï·¨ À´×÷Ϊ×Ô¼ºµÄÓï·¨±ê×¼£¬ÅäºÏǰ¶Ë¹¤³Ì»¯µÄ˼Ï룬ΪС³ÌÐò¿ª·¢´òÔìÁ˸ü¼ÓÓÅÑŵĿª·¢ÌåÑé¡£

Taro ÏîÄ¿µÄ´úÂë×éÖ¯

Òª½øÐÐ Taro µÄÏîÄ¿¿ª·¢£¬Ê×ÏÈ×ÔȻҪ°²×° taro-cli£¬¾ßÌåµÄ°²×°·½·¨¿É²ÎÕÕÎĵµ (https://nervjs.github.io/taro/docs/GETTING-STARTED.html)£¬ÕâÀï²»×ö¹ý¶à½éÉÜÁË£¬Ä¬ÈÏÄãÒѾ­×°ºÃÁË taro-cli ²¢ÄÜÔËÐÐÃüÁî¡£

È»ºóÎÒÃÇÓà cli н¨Ò»¸öÏîÄ¿£¬µÃµ½µÄÏîĿģ°åÈçÏ£º

©À©¤©¤ dist ±àÒë½á¹ûĿ¼
©À©¤©¤ config ÅäÖÃĿ¼
| ©À©¤©¤ dev.js ¿ª·¢Ê±ÅäÖÃ
| ©À©¤©¤ index.js ĬÈÏÅäÖÃ
| ©¸©¤©¤ prod.js ´ò°üʱÅäÖÃ
©À©¤©¤ src Ô´ÂëĿ¼
| ©À©¤©¤ pages Ò³ÃæÎļþĿ¼
| | ©À©¤©¤ index index Ò³ÃæÄ¿Â¼
| | | ©À©¤©¤ index.js index Ò³ÃæÂß¼­
| | | ©¸©¤©¤ index.css index Ò³ÃæÑùʽ
| ©À©¤©¤ app.css ÏîÄ¿×ÜͨÓÃÑùʽ
| ©¸©¤©¤ app.js ÏîÄ¿Èë¿ÚÎļþ
©¸©¤©¤ package.json

Èç¹ûÊÇÊ®·Ö¼òµ¥µÄÏîÄ¿£¬ÓÃÕâÑùµÄÄ£°å±ã¿ÉÒÔÂú×ãÐèÇó£¬ÔÚ index.js ÎļþÖбàÐ´Ò³ÃæËùÐèÒªµÄÂß¼­¡£

¼ÙÈçÏîÄ¿ÒýÈëÁË redux£¬ÀýÈçÎÒÃÇ֮ǰ¿ª·¢µÄÏîÄ¿£¬Ä¿Â¼ÔòÊÇÕâÑùµÄ£º

©À©¤©¤ dist ±àÒë½á¹ûĿ¼
©À©¤©¤ config ÅäÖÃĿ¼
| ©À©¤©¤ dev.js ¿ª·¢Ê±ÅäÖÃ
| ©À©¤©¤ index.js ĬÈÏÅäÖÃ
| ©¸©¤©¤ prod.js ´ò°üʱÅäÖÃ
©À©¤©¤ src Ô´ÂëĿ¼
{1}| ©À©¤©¤ actions redux ÀïµÄ actions
| ©À©¤©¤ asset ͼƬµÈ¾²Ì¬×ÊÔ´
| ©À©¤©¤ components ×é¼þÎļþĿ¼
| ©À©¤©¤ constants ´æ·Å³£Á¿µÄµØ·½£¬ÀýÈç api¡¢Ò»Ð©ÅäÖÃÏî
| ©À©¤©¤ reducers redux ÀïµÄ reducers
| ©À©¤©¤ store redux ÀïµÄ store
| ©À©¤©¤ utils ´æ·Å¹¤¾ßÀຯÊý
| ©À©¤©¤ pages Ò³ÃæÎļþĿ¼
| | ©À©¤©¤ index index Ò³ÃæÄ¿Â¼
| | | ©À©¤©¤ index.js index Ò³ÃæÂß¼­
| | | ©¸©¤©¤ index.css index Ò³ÃæÑùʽ
| ©À©¤©¤ app.css ÏîÄ¿×ÜͨÓÃÑùʽ
| ©¸©¤©¤ app.js ÏîÄ¿Èë¿ÚÎļþ
©¸©¤©¤ package.json
{1}

ÎÒÃÇ֮ǰ¿ª·¢µÄÒ»¸öµçÉÌС³ÌÐò£¬Õû¸öÏîÄ¿´ó¸Å 3 ÍòÐдúÂ룬ÊýÊ®¸öÒ³Ãæ£¬¾ÍÊǰ´ÉÏÊöĿ¼µÄ·½Ê½×éÖ¯´úÂëµÄ¡£±È½ÏÖØÒªµÄÎļþ¼ÐÖ÷ÒªÊÇpages¡¢componentsºÍactions¡£

pagesÀïÃæÊǸ÷¸öÒ³ÃæµÄÈë¿ÚÎļþ£¬¼òµ¥µÄÒ³Ãæ¾ÍÖ±½ÓÒ»¸öÈë¿ÚÎļþ¿ÉÒÔÁË£¬ÌÈÈôÒ³Ãæ±È½Ï¸´ÔÓÄÇôÈë¿ÚÎļþ¾Í»á×÷Ϊ×é¼þµÄ¾ÛºÏÎļþ£¬reduxµÄ°ó¶¨Ò»°ãÒ²ÊÇ´ËÒ³ÃæÀï½øÐС£

×é¼þ¶¼·ÅÔÚcomponentsÀïÃæ¡£ÀïÃæµÄĿ¼ÊÇÕâÑùµÄ£¬¼ÙÈçÓиöcouponÓÅ»ÝÈ¯Ò³Ãæ£¬ÔÚpages×ÔÈ»ÏÈÓиöcoupon£¬×÷ÎªÒ³ÃæÈë¿Ú£¬È»ºóËüµÄ×é¼þ¾Í»á´æ·ÅÔÚcomponents/couponÀïÃæ£¬¾ÍÊÇcomponentsÀïÃæÒ²»á°´ÕÕÒ³Ãæ·ÖÄ£¿é£¬¹«¹²µÄ×é¼þ¿ÉÒÔ½¨Ò»¸öcomponents/publicÎļþ¼Ð£¬½øÐи´Óá£

ÕâÑùµÄºÃ´¦ÊÇÒ³ÃæÖ®¼ä»¥Ïà¶ÀÁ¢£¬»¥²»Ó°Ïì¡£ËùÒÔÎÒÃǼ¸¸ö¿ª·¢ÈËÔ±£¬Ò²Êǰ´ÕÕÒ³ÃæµÄά¶ÈÀ´½øÐзֹ¤£¬»¥²»¸ÉÈÅ£¬´ó´óÌá¸ßÁËÎÒÃǵĿª·¢Ð§ÂÊ¡£

actionsÕâ¸öÎļþ¼ÐÒ²ÊDZȽÏÖØÒª£¬ÕâÀï´¦ÀíµÄÊÇÀ­È¡Êý¾Ý£¬Êý¾ÝÔÙ´¦ÀíµÄÂß¼­¡£¿ÉÒÔ˵£¬Êý¾Ý´¦ÀíµÃºÃ£¬Á÷¶¯ÇåÎú£¬Õû¸öÏîÄ¿¾Í³É¹¦ÁËÒ»°ë£¬¾ßÌå¿ÉÒÔ¿´ÏÂÃæ *Êý¾Ý״̬¹ÜÀí* µÄ²¿·Ö¡£ÈçÉÏ£¬¼ÙÈçÊÇcouponÒ³ÃæµÄactions£¬ÄÇô¾Í»á·ÅÔÚactions/couponÀïÃæ£¬¿ÉÒÔÔÙÒ»´Î¼ûµ½£¬ËùÓеÄÄ£¿é¶¼ÊÇÒÔÒ³ÃæµÄά¶ÈÀ´Çø·ÖµÄ¡£

³ý´ËÖ®Í⣬assetÎļþÓÃÀ´´æ·ÅµÄ¾²Ì¬×ÊÔ´£¬ÈçһЩ icon ÀàµÄͼƬ£¬µ«½¨Òé²»Òª´æ·ÅÌ«¶à£¬±Ï¾¹³ÌÐò°üÓÐÏÞÖÆ¡£¶øconstantsÔòÊÇһЩ´æ·Å³£Á¿µÄµØ·½£¬ÀýÈçapiÓòÃû£¬ÅäÖõȵȡ£

ÏîÄ¿´î½¨Íê±Ïºó£¬ÔÚ¸ùĿ¼ÏÂÔËÐÐÃüÁîÐÐ npm run build:weapp »òÕß taro build --type weapp --watch ±àÒë³ÉС³ÌÐò£¬È»ºó¾Í¿ÉÒÔ´ò¿ªÐ¡³ÌÐò¿ª·¢¹¤¾ß½øÐÐÔ¤ÀÀ¿ª·¢ÁË¡£±àÒë³ÉÆäËû¶ËµÄ»°£¬Ö»ÐèÖ¸¶¨ type ¼´¿É£¨Èç±àÒë H5 £ºtaro build --type h5 --watch £©¡£

ʹÓà Taro ¿ª·¢ÏîĿʱ£¬´úÂë×éÖ¯ºÃ£¬×ñÑ­¹æ·¶ºÍÔ¼¶¨£¬±ã³É¹¦ÁËÒ»°ë£¬ÖÁÉÙ»áÈÿª·¢±äµÃ¸üÓÐЧÂÊ¡£

Êý¾Ý״̬¹ÜÀí

ÉÏÃæËµµ½£¬»áÓà redux ½øÐÐÊý¾Ý״̬¹ÜÀí¡£

˵µ½ redux£¬ÏàÐÅ´ó¼ÒÔçÒѶúÊìÄÜÏêÁË¡£ÔÚ Taro ÖУ¬ËüµÄÓ÷¨ºÍƽʱÔÚ React ÖеÄÓ÷¨´óͬСÒ죬ÏȽ¨Á¢ store¡¢reducers£¬ÔÙ±àд actions£»È»ºóͨ¹ý@tarojs/redux£¬Ê¹ÓÃProvider ºÍ connect£¬½« store ºÍ actions °ó¶¨µ½×é¼þÉÏ¡£»ù´¡µÄÓ÷¨´ó¼Ò¶¼¶®£¬ÏÂÃæÎÒ¸ø´ó¼Ò½éÉÜÏÂÈçºÎ¸üºÃµØÊ¹Óà redux¡£

Êý¾ÝÔ¤´¦Àí

ÏàÐÅ´ó¼Ò¶¼Óöµ½¹ýÕâÖÖʱºò£¬½Ó¿Ú·µ»ØµÄÊý¾ÝºÍÒ³ÃæÏÔʾµÄÊý¾Ý²¢²»ÊÇÍêÈ«¶ÔÓ¦µÄ£¬ÍùÍùÐèÒªÔÙ×öÒ»²ãÔ¤´¦Àí¡£ÄÇôÕâ¸öÒµÎñÂß¼­Ó¦¸ÃÔÚÄÄÀï¹ÜÀí£¬ÊÇ×é¼þÄÚ²¿£¬»¹ÊÇreduxµÄÁ÷³ÌÀ

¾Ù¸öÀý×Ó£º

ÀýÈçÉÏͼµÄ¹ºÎﳵģ¿é£¬½Ó¿Ú·µ»ØµÄÊý¾ÝÊÇ£º

{
code: 0,
data: {
shopMap: {...}, // ´æ·Å¹ºÎï³µÀïÉÌÆ·µÄµêÆÌÐÅÏ¢µÄ map
goods: {...}, // ¹ºÎï³µÀïµÄÉÌÆ·ÐÅÏ¢
...
}
...
}

¶ÔµÄ£¬¹º³µÀïµÄÉÌÆ·µêÆÌºÍÉÌÆ·ÊÇ·ÅÔÚÁ½¸ö¶ÔÏóÀïÃæµÄ£¬µ«ÊÓͼҪÇóËüÃÇÒªÏÔʾÔÚÒ»Æð¡£Õâʱºò£¬Èç¹ûÖ±½Ó½«·µ»ØµÄÊý¾Ý´æµ½store£¬È»ºóÔÚ×é¼þÄÚ²¿renderµÄʱºò¶«Æ´Î÷´Õ£¬½«Á½ÕßÐÅϢƥÅ䣬ÔÙ×öÏÔʾµÄ»°£¬»áÏÔµÃ×é¼þÄÚ²¿µÄÂß¼­Ê®·ÖµÄ»ìÂÒ£¬²»¹»´¿´â¡£

ËùÒÔ£¬ÎÒ¸öÈ˱ȽÏÍÆ¼öµÄ×ö·¨ÊÇ£¬ÔÚ½Ó¿Ú·µ»ØÊý¾ÝÖ®ºó£¬Ö±½Ó½«Æä´¦ÀíΪÓëÒ³ÃæÏÔʾ¶ÔÓ¦µÄÊý¾Ý£¬È»ºóÔÙdispatch´¦ÀíºóµÄÊý¾Ý£¬Ï൱ÓÚ×öÁËÒ»²ãÀ¹½Ø£¬ÏñÏÂÃæÕâÑù£º

const data = result.data // result Ϊ½Ó¿Ú·µ»ØµÄÊý¾Ý
const cartData = handleCartData(data) // handleCartData Ϊ´¦ÀíÊý¾ÝµÄº¯Êý
dispatch({type: 'RECEIVE_CART', payload: cartData}) // dispatch ´¦Àí¹ýºóµÄº¯Êý

...
// handleCartData ´¦ÀíºóµÄÊý¾Ý
{
commoditys: [{
shop: {...}, // ÉÌÆ·µêÆÌµÄÐÅÏ¢
goods: {...}, // ¶ÔÓ¦ÉÌÆ·ÐÅÏ¢
}, ...]
}

¿ÉÒÔ¼ûµ½£¬´¦ÀíÊý¾ÝµÄÁ÷³ÌÔÚ render ǰ±»À¹½Ø´¦ÀíÁË£¬½«¶ÔÓ¦µÄÉÌÆ·µêÆÌºÍÉÌÆ··ÅÔÚÁËÒ»¸ö¶ÔÏóÁË¡£

ÕâÑù×öÓÐÈçϼ¸¸öºÃ´¦£º

Ò»¸öÊÇ×é¼þµÄäÖȾ¸ü´¿´â£¬ÔÚ×é¼þÄÚ²¿²»ÓÃÔÙ¹ØÐÄÈçºÎ½«Êý¾ÝÐ޸ĶøÂú×ãÊÓͼҪÇó£¬Ö»Ðè¹ØÐÄ×é¼þ±¾ÉíµÄÂß¼­£¬ÀýÈçµã»÷ʼþ£¬Óû§½»»¥µÈ¡£

¶þÊÇÊý¾ÝµÄÁ÷¶¯¸ü¿É¿Ø£¬ºǫ́Êý¾Ý ¡ª¡ª> À¹½Ø´¦Àí ¡ª¡ª> ÆÚÍûµÄÊý¾Ý½á¹¹ ¡ª¡ª> ×é¼þ£¬¼ÙÈçºǫ́·µ»ØµÄÊý¾ÝÓб䶯£¬ÎÒÃÇÒª×öµÄÖ»ÊǸıä handleCartData º¯ÊýÀïÃæµÄÂß¼­£¬²»ÓøĶ¯×é¼þÄÚ²¿µÄÂß¼­¡£

ʵ¼ÊÉÏ£¬²»Ö»ÊǺǫ́Êý¾Ý·µ»ØµÄʱºò£¬ÆäËüÊý¾Ý½á¹¹ÐèÒª±ä¶¯µÄʱºò¶¼¿ÉÒÔ×öÒ»²ãÊý¾ÝÀ¹½Ø£¬À¹½ØµÄʱ»úÒ²¿ÉÒÔ¸ù¾ÝÒµÎñÂß¼­µ÷Õû£¬ÖصãÊÇÒªÈÃ×é¼þÄÚ²¿±¾Éí²»¹ØÐÄÊý¾ÝÓëÊÓͼÊÇ·ñ¶ÔÓ¦£¬Ö»×¨×¢ÓÚÄÚ²¿½»»¥µÄÂß¼­£¬ÕâÒ²ºÜ·ûºÏ React ±¾ÉíµÄ³õÖÔ£¬Êý¾ÝÇý¶¯ÊÓͼ¡£

Óà Connect ʵÏÖ¼ÆËãÊôÐÔ

¼ÆËãÊôÐÔ£¿Õâ²»ÊÇÏìӦʽÊÓͼ¿â²Å»áÓеÄô£¬ÆäʵҲ²»ÊÇÕæÕýµÄ¼ÆËãÊôÐÔ£¬Ö»ÊÇͨ¹ýһЩ´¦Àí´ïµ½Ä£ÄâµÄЧ¹û¶øÒÑ¡£ÒòΪºÜ¶àʱºòÎÒÃÇʹÓà redux ¾ÍÖ»ÊǸù¾ÝÑù°å´úÂë¸´ÖÆÒ»Ï£¬¸Ä¸Ä×é¼þ¸÷×ÔµÄstore¡¢actions¡£Êµ¼ÊÉÏ£¬ÎÒÃÇËü¿ÉÒÔ×ö¸ü¶àµÄÊÂÇ飬ÀýÈ磺

export default connect(({
cart,
}) => ({
couponData: cart.couponData,
commoditys: cart.commoditys,
editSkuData: cart.editSkuData
}), (dispatch) => ({
// ...actions °ó¶¨
}))(Cart)

// ×é¼þÀï
render () {
const isShowCoupon = this.props.couponData.length !== 0
return isShowCoupon && <Coupon />
}

ÉÏÃæÊÇºÜÆÕͨµÄÒ»ÖÖconnectд·¨£¬È»ºórenderº¯Êý¸ù¾ÝcouponDataÀïÊÇ·ñÊý¾ÝÀ´äÖȾ¡£Õâʱºò£¬ÎÒÃÇ¿ÉÒÔ°Ñthis.props.couponData.length !== 0Õâ¸öÅж϶ªµ½connectÀ´ï³ÉÒ»ÖÖcomputedµÄЧ¹û£¬ÈçÏ£º

export default connect(({
cart,
}) => {
const { couponData, commoditys, editSkuData } = cart
const isShowCoupon = couponData.length !== 0
return {
isShowCoupon,
couponData,
commoditys,
editSkuData
}}, (dispatch) => ({
// ...actions °ó¶¨
}))(Cart)

// ×é¼þÀï
render () {
return this.props.isShowCoupon && <Coupon />
}

¿ÉÒÔ¼ûµ½£¬ÔÚconnectÀﶨÒåÁËisShowCoupon±äÁ¿£¬ÊµÏÖÁ˸ù¾ÝcouponDataÀ´½øÐÐcomputedµÄЧ¹û¡£

ʵ¼ÊÉÏ£¬ÕâÒ²ÊÇÒ»ÖÖÊý¾ÝÀ¹½Ø´¦Àí¡£³ýÁËcomputed£¬»¹¿ÉÒÔʵÏÖÆäËüµÄ¹¦ÄÜ£¬¾ßÌå¾ÍÓɸ÷λ¿´¹Ù×ÔÓÉ·¢»ÓÁË¡£

ÐÔÄÜÓÅ»¯

¹ØÓÚÊý¾Ý״̬´¦Àí£¬ÎÒÃÇÌáµ½ÁËÁ½µã£¬Ö÷Òª¶¼ÊǹØÓÚ redux µÄÓ÷¨¡£½ÓÏÂÎÒÃÇÁÄһϹØÓÚÐÔÄÜÓÅ»¯µÄ¡£

setState µÄʹÓÃ

ÆäʵÔÚС³ÌÐòµÄ¿ª·¢ÖУ¬×î´ó¿ÉÄܵĻáÓöµ½µÄÐÔÄÜÎÊÌ⣬´ó¶àÊý³öÏÖÔÚsetData£¨¾ßÌåµ½ Taro ÖоÍÊǵ÷Óà setState º¯Êý£©ÉÏ¡£ÕâÊÇÓÉС³ÌÐòµÄÉè¼Æ»úÖÆËùµ¼Öµģ¬Ã¿µ÷ÓÃÒ»´Î setData£¬Ð¡³ÌÐòÄÚ²¿¶¼»á½«¸Ã²¿·ÖÊý¾ÝÔÚÂß¼­²ã£¨ÔËÐл·¾³ JSCore£©½øÐÐÀàËÆÐòÁл¯µÄ²Ù×÷£¬½«Êý¾Ýת»»³É×Ö·û´®ÐÎʽ´«µÝ¸øÊÓͼ²ã£¨ÔËÐл·¾³ WebView£©£¬ÊÓͼ²ãͨ¹ý·´ÐòÁл¯Äõ½Êý¾ÝºóÔÙ½øÐÐÒ³ÃæäÖȾ£¬Õâ¸ö¹ý³ÌÏÂÀ´ÓÐÒ»¶¨ÐÔÄÜ¿ªÏú¡£

ËùÒÔ¹ØÓÚsetStateµÄʹÓã¬ÓÐÒÔϼ¸¸öÔ­Ôò£º

±ÜÃâÒ»´ÎÐÔ¸üо޴óµÄÊý¾Ý¡£Õâ¸ö¸ü¶àµÄÊÇ×é¼þÉè¼ÆµÄÎÊÌ⣬ÔÚÆ½ºâºÃ¿ª·¢Ð§ÂʵÄÇé¿öϾ¡¿ÉÄܵØÏ¸·Ö×é¼þ¡£

±ÜÃâÆµ·±µØµ÷Óà setState¡£Êµ¼ÊÉÏÔÚ Taro ÖÐ setState ÊÇÒì²½µÄ£¬²¢ÇÒÔÚ±àÒë¹ý³ÌÖлá°ïÄã×öÁËÕâ²ãÓÅ»¯£¬ÀýÈçÒ»¸öº¯ÊýÀïµ÷ÓÃÁËÁ½´Î setState£¬×îºó Taro »áÔÚÏÂÒ»¸öʼþÑ­»·Öн«Á½Õߺϲ¢£¬²¢ÌÞ³ýÖØ¸´Êý¾Ý¡£

±ÜÃâºóÌ¨Ì¬Ò³Ãæ½øÐÐ setState¡£Õâ¸ö¸üÓпÉÄÜÊÇÒòΪÔÚ¶¨Ê±Æ÷µÈÒì²½²Ù×÷ÖÐʹÓÃÁË setState£¬µ¼ÖºóÌ¨Ì¬Ò³Ãæ½øÐÐÁË setState ²Ù×÷¡£Òª½â¾öÎÊÌâ¸Ã¾ÍÔÚÒ³ÃæÏú»Ù»òÊÇÒþ²ØÊ±½øÐÐÏú»Ù¶¨Ê±Æ÷²Ù×÷¼´¿É¡£

ÁбíäÖȾÓÅ»¯

ÔÚÎÒÃÇ¿ª·¢µÄÒ»¸öÉÌÆ·ÁбíÒ³ÃæÖУ¬ÊÇÐèÒªÓÐÎÞÏÞÏÂÀ­µÄ¹¦ÄÜ¡£

Òò´Ë»á´æÔÚÒ»¸öÎÊÌ⣬µ±¼ÓÔØµÄÉÌÆ·Êý¾ÝÔ½À´Ô½¶àʱ£¬¾Í»á±¨´í£¬invokeWebviewMethod Êý¾Ý´«Ê䳤¶ÈΪ 1227297 ÒѾ­³¬¹ý×î´ó³¤¶È 1048576¡£Ô­Òò¾ÍÊÇÎÒÃÇÉÏÃæËù˵µÄ£¬Ð¡³ÌÐòÔÚ setData µÄʱºò»á½«¸Ã²¿·ÖÊý¾ÝÔÚÂß¼­²ãÓëÊÓͼ²ãÖ®¼ä´«µÝ£¬µ±Êý¾ÝÁ¿¹ý´óʱ¾Í»á³¬³öÏÞÖÆ¡£

ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÎÒÃDzÉÓÃÁËÒ»¸ö´ó·Öҳ˼ÏëµÄ·½·¨¡£¾ÍÊÇÔÚÏÂÀ­ÁбíÖмǼµ±Ç°·ÖÒ³£¬´ïµ½ 10 Ò³µÄʱºò£¬¾ÍÒÔ 10 ҳΪ·Ö¸îµã£¬½«µ±Ç° this.state ÀïµÄ list È¡·Ö¸îµãºóÃæµÄÊý¾Ý£¬ÅжϹö¶¯Ïòǰ¹ö¶¯¾Í½«Ç°ÃæÊý¾Ý setState ½øÈ¥£¬Á÷³ÌͼÈçÏ£º

¿ÉÒÔ¼ûµ½£¬ÎÒÃÇÏȰÑÉÌÆ·ËùÓеÄԭʼÊý¾Ý·ÅÔÚthis.allListÖУ¬È»ºóÅжϸù¾ÝÒ³ÃæµÄ¹ö¶¯¸ß¶È£¬ÔÚÒ³Ãæ¹ö¶¯Ê¼þÖÐÅжϵ±Ç°µÄÒ³Âë¡£Ò³ÂëСÓÚ 10£¬È¡ this.allList.slice µÄǰʮÏ´óÓÚµÈÓÚ 10£¬ÔòÈ¡ºóÊ®Ï×îºóÔÙµ÷Óà this.setState ½øÐÐÁбíäÖȾ¡£ÕâÀïµÄºËÐÄ˼Ïë¾ÍÊÇ£¬°Ñ¿´µÃ¼ûµÄÊý¾Ý²ÅäÖȾ³öÀ´£¬´Ó¶ø±ÜÃâÊý¾ÝÁ¿¹ý´ó¶øµ¼Öµı¨´í¡£

ͬʱΪÁËÌáǰäÖȾ£¬ÎÒÃÇ»áÔ¤ÉèÒ»¸ö 500 µÄãÐÖµ£¬Ê¹Õû¸öäÖȾÇл»µÄÁ÷³Ì¸ü¼Ó˳³©¡£

¶à¶Ë¼æÈÝ

¾¡¹Ü Taro ±àÒë¿ÉÒÔÊÊÅä¶à¶Ë£¬µ«ÓÐЩÇé¿ö»òÕßÓÐЩ API ÔÚ²»Í¬¶ËµÄ±íÏÖ²îÒìÊÇÊ®·Ö¾Þ´óµÄ£¬Õâʱºò Taro û°ì·¨°ïÎÒÃÇÊÊÅ䣬ÐèÒªÎÒÃÇÊÖ¶¯ÊÊÅä¡£

process.env.TARO_ENV

ʹÓÃprocess.env.TARO_ENV¿ÉÒÔ°ïÖúÎÒÃÇÅжϵ±Ç°µÄ±àÒë»·¾³£¬´Ó¶ø×öÒ»Ð©ÌØÊâ´¦Àí£¬Ä¿Ç°ËüµÄȡֵÓÐ weapp ¡¢swan ¡¢ alipay ¡¢ h5 ¡¢ rn Îå¸ö¡£¿ÉÒÔͨ¹ýÕâ¸ö±äÁ¿À´Êéд¶ÔӦһЩ²»Í¬»·¾³ÏµĴúÂ룬ÔÚ±àÒëʱ»á½«²»ÊôÓÚµ±Ç°±àÒëÀàÐ͵ĴúÂëÈ¥µô£¬Ö»±£Áôµ±Ç°±àÒëÀàÐÍϵĴúÂ룬´Ó¶ø´ïµ½¼æÈݵÄÄ¿µÄ¡£ÀýÈçÏëÔÚ΢ÐÅС³ÌÐòºÍ H5 ¶Ë·Ö±ðÒýÓò»Í¬×ÊÔ´£º

<table width="60%" border="0" align="center" cellpadding="7" cellspacing="1" bgcolor="#CCCCCC" class="content">
<tr >
<td height="25" bgcolor="#f5f5f5" id="dai"> <p style="text-indent: 0em;">&nbsp;</p></td>
</tr>
</table>

ÎÒÃÇÖªµÀÁËÕâ¸ö±äÁ¿µÄÓ÷¨ºó£¬¾Í¿ÉÒÔ½øÐÐһЩ¶à¶Ë¼æÈÝÁË£¬ÏÂÃæ¾ÙÁ½¸öÀý×ÓÀ´Ïêϸ²ûÊö¡£

¹ö¶¯Ê¼þ¼æÈÝ

ÔÚС³ÌÐòÖУ¬¼àÌýÒ³Ãæ¹ö¶¯ÐèÒªÔÚÒ³ÃæÖеÄonPageScrollʼþÀï½øÐУ¬¶øÔÚ H5 ÖÐÔòÊÇÐèÒªÊÖ¶¯µ÷ÓÃwindow.addEventListenerÀ´½øÐÐʼþ°ó¶¨£¬ËùÒÔ¾ßÌåµÄ¼æÈÝÎÒÃÇ¿ÉÒÔÕâÑù´¦Àí£º

class Demo extends Component {
constructor() {
super(...arguments)
this.state = {
}
this.pageScrollFn = throttle(this.scrollFn, 200, this)
}

scrollFn = (scrollTop) => {
// do something
}

// ÔÚ H5 »òÕ߯äËü¶ËÖУ¬Õâ¸öº¯Êý»á±»ºöÂÔ
onPageScroll (e) {
this.pageScrollFn(e.scrollTop)
}

componentDidMount () {
// Ö»ÓбàÒëΪ h5 ʱÏÂÃæ´úÂë²Å»á±»±àÒë
if (process.env.TARO_ENV === 'h5') {
window.addEventListener('scroll', this.pageScrollFn)
}
}
}

¿ÉÒÔ¼ûµ½£¬ÎÒÃÇÏȶ¨ÒåÁËÒ³Ãæ¹ö¶¯Ê±ËùÐèÖ´Ðеĺ¯Êý£¬Í¬Ê±ÍâÃæ×öÁËÒ»²ã½ÚÁ÷µÄ´¦Àí

²»Á˽⺯Êý½ÚÁ÷µÄ¿ÉÒÔ¿´ÕâÀï¡£

È»ºó£¬ÔÚ onPageScroll º¯ÊýÖУ¬ÎÒÃǽ«¸Ãº¯ÊýÖ´ÐС£Í¬Ê±µÄ£¬ÔÚ componentDidMount ÖУ¬½øÐл·¾³Åжϣ¬Èç¹ûÊÇ h5 »·¾³¾Í½«Æä°ó¶¨µ½ window µÄ¹ö¶¯Ê¼þÉÏ¡£

ͨ¹ýÕâÑùµÄ´¦Àí£¬ÔÚС³ÌÐòÖУ¬Ò³Ãæ¹ö¶¯Ê±¾Í»áÖ´ÐÐ onPageScroll º¯Êý£¨ÔÚÆäËü¶Ë¸Ãº¯Êý»á±»ºöÂÔ£©£»ÔÚ h5 ¶Ë£¬ÔòÖ±½Ó½«¹ö¶¯Ê¼þ°ó¶¨µ½windowÉÏ¡£Òò´ËÎÒÃǾʹï³ÉС³ÌÐò£¬h5 ¶ËµÄ¹ö¶¯Ê¼þµÄ°ó¶¨¼æÈÝ£¨ÆäËü¶ËµÄ´¦ÀíÒ²ÊÇÀàËÆµÄ£©¡£

canvas ¼æÈÝ

¼ÙÈçҪͬʱÔÚС³ÌÐòºÍ H5 ÖÐʹÓà canvas£¬Í¬ÑùÊÇÐèÒª½øÐÐһЩ¼æÈÝ´¦Àí¡£canvas ÔÚС³ÌÐòºÍ H5 ÖÐµÄ API »ù±¾¶¼ÊÇÒ»Öµģ¬µ«Óм¸µã²»Í¬£º

canvas ÉÏÏÂÎĵĻñÈ¡·½Ê½²»Í¬£¬h5 ÖÐÊÇÖ±½Ó´Ó dom ÖлñÈ¡£»¶øÐ¡³ÌÐòÀïҪͨ¹ýµ÷Óà Taro.createCanvasContext À´ÊÖ¶¯´´½¨£»

»æÖÆÊ±£¬Ð¡³ÌÐòÀﻹÐèÔÚÊÖ¶¯µ÷Óà CanvasContext.draw À´½øÐлæÖÆ¡£

ËùÒÔ×ö¼æÈÝ´¦Àíʱ¾ÍÎ§ÈÆÕâÁ½¸öµãÀ´½øÐмæÈÝ£º

componentDidMount () {
// Ö»ÓбàÒëΪ h5 ÏÂÃæ´úÂë²Å»á±»±àÒë
if (process.env.TARO_ENV === 'h5') {
this.context = document.getElementById('canvas-id').getContext('2d')
// Ö»ÓбàÒëΪС³ÌÐòÏÂÃæ´úÂë²Å»á±»±àÒë
} else if (process.env.TARO_ENV === 'weapp') {
this.context = Taro.createCanvasContext('canvas-id', this.$scope)
}
}

// »æÖƵĺ¯Êý
draw () {
// ½øÐÐһЩ»æÖƲÙ×÷
// .....

// ¼æÈÝС³ÌÐò¶ËµÄ»æÖÆ
typeof this.context.draw === 'function' && this.context.draw(true)
}

render () {
// ͬʱ±ê¼ÇÉÏ id ºÍ canvas-id
return <Canvas id='canvas-id' canvas-id='canvas-id'/>
}

¿ÉÒÔ¼ûµ½£¬ÏÈÊÇÔÚ componentDidMount ÉúÃüÖÜÆÚÖУ¬·Ö±ðÕë¶Ô²»Í¬µÄ¶ËµÄ·½·¨¶øÈ¡µÃ CanvasContext ÉÏÏÂÎÄ£¬ÔÚС³ÌÐò¶ËÊÇÖ±½Óͨ¹ýTaro.createCanvasContext½øÐд´½¨£¬Í¬Ê±ÐèÒªÔÚµÚ¶þ¸ö²ÎÊý´«Èëthis.$scope£»ÔÚ H5 ¶ËÔòÊÇͨ¹ý document.getElementById(id).getContext('2d')À´»ñµÃ CanvasContext ÉÏÏÂÎÄ¡£

»ñµÃÉÏÏÂÎĺ󣬻æÖƵĹý³ÌÊÇÒ»Öµģ¬ÒòΪÁ½¶ËµÄ API »ù±¾Ò»Ñù£¬¶øÖ»ÐèÔÚ»æÖƵ½×îºóʱÅжÁÉÏÏÂÎÄÊÇ·ñÓÐ draw º¯Êý£¬Óеϰ¾ÍÖ´ÐÐÒ»±éÀ´¼æÈÝС³ÌÐò¶Ë£¬½«Æä»æÖƳöÀ´¡£

ÎÒÃÇÄÚ²¿Óà Canvas дÁËÒ»¸öµ¯Ä»¹Ò¼þ£¬ÕýÊÇÓÃÕâÖÖ·½·¨À´½øÐÐÁ½¶ËµÄ¼æÈÝ¡£

ÉÏÊöÁ½¸ö¾ßÌåÀý×Ó×ܽáÆðÀ´£¬¾ÍÊÇÏȸù¾Ý Taro ÄÚÖÃµÄ process.env.TARO_ENV »·¾³±äÁ¿À´Åжϵ±Ç°»·¾³£¬È»ºóÔÙ¶ÔijЩ¶Ë½øÐе¥¶ÀÊÊÅä¡£Òò´Ë¾ßÌåµÄ´úÂë²ã¼¶µÄ¼æÈÝ·½Ê½»á¶àÖÖ¶àÑù£¬Íêȫȡ¾öÓÚÄãµÄÐèÇó£¬Ï£ÍûÉÏÃæµÄÀý×ÓÄܶÔÄãÓÐËùÆô·¢¡£

×ܽá

ÕûÌå¶øÑÔ£¬¶¼ÊÇһЩ½ÏΪÉîÈëµÄ£¬Æ«Êµ¼ùÀàµÄÄÚÈÝ£¬ÈçÓÐʲô¹Ûµã»òÒìÒ飬»¶Ó­¼ÓÈ뿪·¢½»Á÷Ⱥ£¬Ò»Æð²ÎÓëÌÖÂÛ¡£

   
12280 ´Îä¯ÀÀ       27