1.elementui源码学习之仿写一个el-tag
2.å端,饿源å端,åµå
¥å¼ï¼
3.elementui源码学习之仿写一个el-timeline
4.dayjs源码解析(一):概念、locale、码饿码constant、源代utils tags
elementui源码学习之仿写一个el-tag
本文旨在记录如何仿写el-divider组件的饿源细节,以帮助读者更深入地理解饿了么UI中对应组件的码饿码具体工作方式。这是源代源码加行号继之前elementui源码学习仿写系列文章之后的又一新作,未来如有空闲时间,饿源将继续更新并仿写其他组件。码饿码相关源码已托管于github,源代读者可下载后通过npm start运行,饿源并结合注释进行学习。码饿码github仓库地址为:github.com/shuirongshui...
针对tag组件,源代其主要用途是饿源在线投稿系统 源码展示标签信息,常见需求包括:
饿了么官方采用的码饿码el-tag组件是通过render函数实现的,因此这里我们也采用相同的源代方法进行编写。整体而言,这个组件相对简单。只需注意jsx的语法即可。
若想查看效果,可直接复制粘贴代码运行,并结合注释进行学习。最完整的代码可在github上找到。
以下是使用代码封装组件的代码总结:
å端,å端,åµå ¥å¼ï¼
硬件å端å¼åå硬件å端å¼ååªä¸ªå·¥èµé«åµå ¥å¼å¼åå硬件å端å¼åæ¯ä¸åäºåï¼ï¼?
åµå ¥å¼å¼åå硬件å软件å¼åï¼å ¶ä¸ç¡¬ä»¶å软件éé¢è¿è¦ç»åï¼å¾å¤å²ä½åé¢åã说å°åªä¸ªå·¥èµé«ï¼ä¸å¥½è¯´ï¼è¿åä¸åå°åï¼ä¸åå²ä½åä¸åæ°´å¹³æå ³ç³»ï¼æ以ä¸è½ä¸æ¦è论ã建议æ 论åå°åªä¸ªé¢åï¼å å¦å¥½å说ï¼ä¸è¦å¤ªå¨ä¹å·¥èµã
软件å¼åï¼å端å¼åï¼åå端å¼åï¼åªä¸ªæ´ç´¯ï¼åªä¸ªæ´æ£é±ï¼è°¢è°¢æç¹
é¦å ï¼è½¯ä»¶å¼åå ä¹å æ¬äºä¸åï¼ä¸ä» å æ¬å端å端è¿å æ¬åµå ¥å¼é½æ¯è½¯ä»¶å¼åã
å端å¼åè·å端å¼åï¼é½å¾ç´¯ï¼å ¨ç个人ã
å端ç®åæ´èµé±ï¼å 为å端æ£å¨èé£å ¶ä»æ¡é¢é¢åç份é¢ï¼å 为å端ç°å¨ä»»ä½çé¢é½å¯ä»¥è·ï¼LinuxãWinãMacãAndriodãiPhoneï¼ï¼è¿äºé¢åçä»·å¼æ£å¨è¢«è½¬ç§»å°å端ï¼ç¹æç½é¡µå端ï¼ï¼ä¹å°±æ¯è¯´ç®åå端æ¯è½åäºæ æå¤çï¼è³å°æ¯çä¸å»ã
å¾é«çº§ææ¯è®²ï¼å端ä¼æ¯å端è¦é¾ï¼ä¹è¦æ´ç´¯ï¼å·¥èµä¹æ´é«ã
æ以ï¼ç论ä¸ï¼å级ç¨åºåå端工èµé«ï¼é«çº§ç¨åºåå端工èµé«ã
ä½æ¯ï¼å®é ä¸ï¼å级æä¼åååï¼é«çº§ç¨åºåå¥é½è¦ã
å¦javaåºæ¥åï¼åå端è¿æ¯å端好ï¼ä»ææ¯æ¬èº«æ¥è¯´ï¼javaæ¬èº«ä¼ååå端ä¸äºï¼å¦æä½ å¯¹å端æå ´è¶£çè¯ï¼ånode.jsãbootstrapãvue.jsççå端æ¡æ¶çä¸èªå·±æ没æææ¡ï¼ç°å¨ä¸æ¯æç¹Html+cssæè è½åç¹ajaxå°±å¯ä»¥åå端äºãå½ç¶ï¼åå端çè¯ï¼é¤æ¤ä»¥å¤ï¼å¯¹ç½ç«çé è²ã页é¢çå¸å±ï¼å æ¬ä¸äºå®¡ç¾ççè¿æ¯æç¹å°è¦æ±çï¼å¦æä½ è½è¾¾å°çè¯ï¼ä½ å¯ä»¥å°è¯å»åå端ã
å°±ç®åæ¥è¯´ï¼éçåå端å离ï¼å端åå端çèªèµå¾ éè¿åå¿é½å·®ä¸å¤äºãéæ©å端è¿æ¯å端å¾å¤æ¶åç个人ææ¿å§ï¼æè æ¯è§å¾èªå·±å端强ç¹å¿è¿æ¯å端强ç¹å¿ï¼ä¸è¿ï¼ä»ä¸ªäººå»ºè®®ä¸æ¥è¯´è¿æ¯å端ä¼æ´å¥½äºï¼å 为å端ç¸å¯¹æ¥è¯´æ¯è¾ç®åï¼åäºä¸æ®µæ¶é´çå端è¿å¯ä»¥è½¬å»åå端ãå¦å¤çè¯ï¼å°±æ¯å¾å¤æ¶åå 个项ç®å¯ä»¥ç¨åä¸å¥å端æ¡æ¶ï¼éè¦çè¯æ¹æ¹å°±å¥½ï¼é¤é对å端è¦æ±è¾é«ï¼ä¸ä¸ªé¡¹ç®ä¸å¥å端ï¼ä¸è¬åè¿ç§æ åµè¿æ¯æ¯è¾å°çã
å¦ç¼ç¨è½åä»ä¹å·¥ä½ï¼çä½ å¦åªæ¹é¢çï¼å¦ç¼ç¨å¯ä»¥åå端å¼åï¼å端å¼åï¼åµå ¥å¼å¼åï¼è¿æè¿ç»´çå·¥ä½ï¼åå端è¦å¦htmlãcssãjsåpsï¼å端çè¯è¿è¦å¤å¦ä¸é¨å端è¯è¨javaãpythonçï¼è¿ç»´å¦linuxãshellçã
ç½é¡µè®¾è®¡å端åå端çåºå«ï¼è¶è¯¦ç»è¶å¥½ã详ç»ç解éä¸ä¸webåå端çåºå«
1ã
åå°ï¼åç°ç»ç¨æ·çè§è§ååºæ¬çæä½ã
åå°ï¼ç¨æ·æµè§ç½é¡µæ¶ï¼æ们çä¸è§çåå°æ°æ®è·å¨ãåå°å æ¬å端ãå端ã
å端ï¼å¯¹åºæ们åçhtmlãcssãjavascriptçç½é¡µè¯è¨ä½ç¨å¨å端ç½é¡µã
å端ï¼å¯¹åºjspãjavaBeanãdaoå±ãactionå±åserviceå±çä¸å¡é»è¾ä»£ç ãï¼å æ¬æ°æ®åºï¼
为ä»ä¹jspæ¯å端å¢ï¼ä¸»è¦æ¯jspçè¿è¡åçæ¯å¨tomcatæå¡å¨è¿è¡çã
2ã
(1)javawebæ¯javaå¼åä¸çä¸ä¸ªæ¹åjavaææå®åçï¼æwebçï¼æåµå ¥å¼ççãjavawebå°±æ¯ææwebæ¹åçï¼javawebå两åï¼ä¸åæ¯æå¡å¨ç«¯å«å端ï¼å¦ä¸åå«å端ï¼ä¹å°±æ¯webå端ãå端就æ¯ç¨æ·è½çå°çé¨åï¼æ¯å¦æ·å®ç½ï¼qq空é´ï¼ç½é¡µä¸ä½ è½çå°çé½æ¯webå端åçãå端åçå°±æ¯ä¸ºå端çå±ç¤ºä¸å¡é»è¾åè½åå¤çã
(2)javawebå æ¬äºjspï¼servelt以åä¸äºæ¡æ¶æ¯å¦springï¼structs以åä¸æ°æ®åºäº¤äºçç¥è¯ï¼å½ç¶ä¹æ¶åå°äºhtmlï¼cssçå端ææ¯ï¼ä½æ¯æ´ä¾§éäºå端çå¼åãwebå端主è¦æ¯htmlï¼cssï¼javascriptä¹ç±»çææ¯ã
jawebæ¯javaeeçä¸ä¸ªæ¹åï¼Javawebï¼ç±å端ãJava代ç ãåæ°æ®åºä¸ä¸ªå¤§æ¹é¢ç»æï¼å端åªæ¯å ¶ä¸ä¹ä¸ã
(3)å¨æ们çæºåä¸çå°ççé¢ï¼å®è£ çç¨åºï¼ç»ç¨æ·ççï¼æä½çå°±æ¯å端ï¼èä½ çä¸å°çï¼å¸®ä½ ä¿åç½ç»æ¸¸ææ°æ®ï¼ä¿ååºç¨æ°æ®ï¼å¤çæ°æ®çå°±æ¯å端ï¼æå¡å¨ï¼ãæ¯å¦è¯´ï¼æ们å¨ç¨çç¥ä¹å°±æ¯å端ï¼èä¿åè¿ä¸ªé®é¢ï¼è¿ææè¿ä¸ªé®é¢æ¨éç»ä½ çå°±æ¯å端ã
äºãå®ä¹ä¸å
ä¸è¬æ¥è¯´ï¼æ们å°ç½ç«å为å端åå端ãå端主è¦è´è´£é¡µé¢çå±ç¤ºï¼å端åæ¯ä¸å¡é»è¾çå®ç°ã
1ãWebå端:
顾åæä¹æ¯æ¥åWebçå端çãè¿éæ说çå端æ³æWebå端ï¼ä¹å°±æ¯å¨Webåºç¨ä¸ç¨æ·å¯ä»¥çå¾è§ç¢°å¾ççä¸è¥¿ãå æ¬Web页é¢çç»æãWebçå¤è§è§è§è¡¨ç°ä»¥åWebå±é¢ç交äºå®ç°ã
2ãWebå端ï¼
å端æ´å¤çæ¯ä¸æ°æ®åºè¿è¡äº¤äºä»¥å¤çç¸åºçä¸å¡é»è¾ãéè¦èèçæ¯å¦ä½å®ç°åè½ãæ°æ®çååãå¹³å°ç稳å®æ§ä¸æ§è½çã
ä¸ãéè¦ææ¡çææ¯ä¸å
1ãWebå端ï¼
ç²¾éJSï¼è½çç»åºç¨JQueryï¼æCSSï¼è½çç»è¿ç¨è¿äºç¥è¯ï¼è¿è¡äº¤äºææçå¼åã
(1)ç²¾éHTMLï¼è½å¤ä¹¦åè¯ä¹åçï¼ç»ææ¸ æ°ï¼æç»´æ¤çHTMLç»æï¼
(2)ç²¾éCSSï¼è½å¤è¿åè§è§è®¾è®¡ï¼å¹¶å ¼å®¹ä¸çæ¿è®¤ç主æµæµè§å¨ï¼
(3)çæJavaScriptï¼äºè§£ECMAScriptåºç¡å 容ï¼ææ¡1-2ç§jsæ¡æ¶ï¼å¦JQueryï¼
(4)对常è§çæµè§å¨å ¼å®¹é®é¢ææ¸ æ°çç解ï¼å¹¶æå¯é ç解å³æ¹æ¡ï¼
(5)对æ§è½æä¸å®çè¦æ±ï¼äºè§£yahooçæ§è½ä¼å建议ï¼å¹¶å¯ä»¥å¨é¡¹ç®ä¸ææå®æ½ã
2ãWebå端ï¼
å端å¼å人åï¼ä¼åJava代ç ï¼ä¼åSQLè¯å¥ï¼è½åç®åçæ°æ®åºè®¾è®¡ï¼ä¼SpringåiBatisï¼æä¸äºè®¾è®¡æ¨¡å¼çã
(1)ç²¾éjspï¼servletï¼javabeanï¼JMSï¼EJBï¼Jdbcï¼Flexå¼åï¼æè 对ç¸å ³çå·¥å ·ãç±»åºä»¥åæ¡æ¶é常çæï¼å¦Velocityï¼Springï¼Hibernateï¼iBatisï¼OSGIçï¼å¯¹Webå¼åç模å¼æè¾æ·±çç解ï¼
(2)ç»ä½¿ç¨oracleãsqlserverãmysqlç常ç¨çæ°æ®åºç³»ç»ï¼å¯¹æ°æ®åºæè¾å¼ºç设计è½åï¼
(3)çæmaven项ç®é 置管çå·¥å ·ï¼çætomcatãjbossçåºç¨æå¡å¨ï¼åæ¶å¯¹å¨é«å¹¶åå¤çæ åµä¸çè´è½½è°ä¼æç¸å ³ç»éªè ä¼å èèï¼
(4)ç²¾éé¢å对象åæå设计ææ¯ï¼å æ¬è®¾è®¡æ¨¡å¼ãUML建模çï¼
(5)çæç½ç»ç¼ç¨ï¼å ·æ设计åå¼å对å¤APIæ¥å£ç»éªåè½åï¼åæ¶å ·å¤è·¨å¹³å°çAPIè§è设计以åAPIé«æè°ç¨è®¾è®¡è½åã
åãwebå端åå端æ¯æä¹è¿æ¥çï¼
1ãwebæå¡å¨ï¼apacheãtomcatçï¼ï¼ç½ç»åè®®ï¼æè phpçé½å¯è½ï¼ä½javawebå¯ä»¥ç¡®å®å端就æ¯javaï¼webåç«¯å ¶å®é½ä¸æ ·ã
å端åJavawebçåºå«æ´å¤çå¨äºä¸ä¸ªä¸»è¦è´è´£å端ç设计åææï¼èJavawebæ´ä¸æ³¨äºå端çå 容ã
3ãåå¼å§ä»äºwebå¼åæ¶ï¼é¦å è¦éåå¦ä¹ æ¹åï¼çæ¯æ³ä»äºå端é¨åè¿æ¯å端ç¨åºé¨åãå½ç¶å¨å·¥ä½çåæï¼å°±ä¸ä¼åçé£ä¹ç»è´äºãåå端å°åæä¹ä¼æä¸äºå端çææ¯ï¼åä¹ï¼å端ä¹æ¯ã
å ãå¦ä¹ Webå端å¼åé½éè¦ææ¡åªäºæè½ï¼
1ãå¦ä¹ htmlãè¿ä¸ªæ¯æç®åç,ä¹æ¯æåºç¡ç.è¦çç»ææ¡divãformtableãulliãpãspanãfontè¿äºæ ç¾,è¿äºé½æ¯æ常ç¨ç,ç¹å«æ¯divåtable,divç¨äºå¸å±ãtableä¹å¯ä»¥ç¨äºå¸å±,ä½æ¯ä¸çµæ´»,åºæ¬tableæ¯ç¨æ¥åæ°æ®æ交éã
2ãå¦ä¹ cssãè¿é说çcssä¸å æ¬css3,ä¸è¬æ们çå°webå端å¼åå·¥ç¨å¸çè¦æ±éé¢,æä¸ä¸ªä¼ä½¿ç¨css+htmlæè css+divæ¥è¿è¡çé¢å¸å±,æ以cssæ¯ç¨äºè¾ å©htmlæ¥å¸å±åå±ç¤ºç,æ们称ä¹ä¸ºâcssæ ·å¼â,为ä»ä¹ä¼è¯´css+divå¢?å 为æä¸é¢è¯´äºdivå°±æ¯html主è¦ç¨äºå¸å±çä¸è¥¿,æ以divå°±æ¯æ ¸å¿ææ¡çä¸è¥¿!é£ä¹cssè¯å®å¿ é¡»è¦é ådivæ¥ä½¿ç¨æ好.cssè¦çç»ææ¡floatãpositionãwidthãheightï¼ä»¥å对äºçæ大æå°ãä¼ä½¿ç¨ç¾åç¾ãoverflowãmarginãpaddingçç,è¿äºé½æ¯è·å¸å±æå ³ç³»çæ ·å¼,ä¸ç¹è¦ææ¡ã
3ãå¦ä¹ jsãå¯è½å两个大家è§å¾è¿è¿çå»,çå°jså°±å»ç¼äº,å ¶å®å§,jså ¥é¨å¾ç®åç,ä¸éè¦ä¼å¾å¤ä¸è¥¿ç,åªè¦ä¼æ ¹æ®æ个idãæè nameæ¿å°ç½é¡µdomæè æ ·å¼ãæè å¼,ç¶åä¼ç»æ个idæè nameçå ç´ æ ç¾èµå¼ãæè 追å æ°æ®ã追html,è¿ä¸ªæ¯è·æ°æ®æå ³ç³»çæä½,ç¶åæ°æ®é»è¾å¤æ,æææ¹é¢ç,æ éå°±æ¯è·³è½¬ãå¼¹æ¡ãéèä»ä¹ç,æè¿äºå ¨é¨ç»åå ¶ä»å°±æ¯å®é ç¨éäº,代ç ä¸ç¹é½ä¸é¾,ä¼äºè¿äºåºç¡js,å ¶ä»çç´æ¥ç¾åº¦å°±å¥½äº.ç¶åçå¤äº,ç¨å¤äº,å°±ä»ä¹é½ä¸æ¯é®é¢äºã
4ãå¦ä¹ jqueryãjqueryæ¯ç¸å½äºæjså°è£ äºä¸å¥çä¸ä¸ªjsæ件,ç®çå°±æ¯æä½èµ·æ¥æ´æ¹ä¾¿,代ç åçæ´å°,jqueryå ¥é¨ä¹å¾ç®å,é£äºæ¯å ¥é¨éè¦å¦çåjsä¸æ ·,åªæ¯æ¢æäºjqç代ç .å ¶ä»çä¸æ ·ç¾åº¦å°±å¤äºã
5ãæ好ä¼ç¹åå°è¯è¨,æ¯å¦javaãphp,为ä»ä¹å¢?å 为åå°çé¢çæ°æ®é½æ¯ä»åå°æ¥ç,å¦æä¼ç¹åå°ä»£ç ,å°±ç¥éæä¹è·åå°äº¤äºæ°æ®æ¯æ好ç,è¿æ ·è约æ¶é´,ä¹å¯ä»¥è®©å端代ç æ´è§è.ä¸ç¶å¯è½å ä¸ºä½ çåæ³åå端ç»æ¥çæ°æ®ä¸è½ç»åä¸,é£ä¹å端代ç åå¾éæ°å,é£å°±æ´å 麻ç¦äºã
6ãå¦ä¹ css3+html5,å¯è½è¿ä¸ªå¯¹äºæ´æ¥æçæ°äººæ¥è¯´æç¹å°é¾ï¼éè¦è¾å¼ºç代ç ç¥è¯ä¸ç»éªï¼ä½æ¯å¦æä½ ä»¬æ¯åå¤ä¸é¨æå端,é£ä¹æ好è¿æ¯å¦ä¸ä¸ï¼è¿æ ·å¯¹äºå°æ¥çå·¥ä½ä¼ææ´å¤§ç帮å©ã
ä¸ãä»äºJavaå端å¼åé½éè¦ææ¡åªäºæè½ï¼
对äºåå¦Java并ä¸æå¿äºå端å¼åçåå¦æ¥è¯´ï¼éè¦éç¹å ³æ³¨ä»¥ä¸å 个é¨åï¼
1ãåºç¡ï¼æ¯å¦è®¡ç®æºç³»ç»ãç®æ³ãç¼è¯åççç
2ãWebå¼åï¼ä¸»è¦æ¯Webå¼åç¸å ³çå 容ï¼å æ¬HTML/CSS/jsï¼å端页é¢ï¼ãServlet/JSPï¼J2EEï¼ä»¥åMySQLï¼æ°æ®åºï¼ç¸å ³çç¥è¯ãå®ä»¬çå¦ä¹ 顺åºåºè¯¥æ¯ä»åå°åï¼å æ¤æå å¦ä¹ çåºè¯¥æ¯HTML/CSS/JSï¼å端页é¢ï¼ãè¿æä¸äºå段æ¡æ¶æ¯å¦easyui,è¿æjs,jqueryçææ¯ã
3ãJ2EEï¼ä½ éè¦å¦ä¹ çæ¯Servlet/JSPï¼J2EEï¼é¨åï¼è¿é¨åæ¯Javaå端å¼åå¿ é¡»é常精éçé¨åï¼å æ¤è¿é¨åæ¯è¿ä¸é¨åä¸æéè¦è±ç²¾åçãå ³äºServlet/Jspé¨åè§é¢çéæ©ï¼ä¸çæ¯è¾è®¤å¯é©¬å£«å µçè§é¢ã4ãæ°æ®åºï¼ä½ éè¦å¦ä¼ä½¿ç¨æ°æ®åºï¼mysqlæ¯ä¸ªä¸éçå ¥é¨éæ©ï¼èä¸Javaé¢åé主æµçå ³ç³»åæ°æ®åºå°±æ¯mysqlãè¿é¨åä¸è¬å¨ä½ å¦ä¹ Servlet/Jspçæ¶åï¼å°±ä¼æ¥è§¦å°çï¼å ¶ä¸çJDBCé¨åå°±æ¯æ°æ®åºç¸å ³çé¨åãä½ ä¸ä» è¦å¦ä¼ä½¿ç¨JDBCæä½æ°æ®åºï¼è¿è¦å¦ä¼ä½¿ç¨æ°æ®åºå®¢æ·ç«¯å·¥å ·ï¼æ¯å¦navicatï¼sqlyogï¼äºéä¸å³å¯ã
5ãå¼åæ¡æ¶ï¼ç®åæ¯è¾ä¸»æµçæ¯SSMæ¡æ¶ï¼å³springãspringmvcãmybatisãä½ éè¦å¦ä¼è¿ä¸ä¸ªæ¡æ¶çæ建ï¼å¹¶ç¨å®ä»¬ååºä¸ä¸ªç®åçå¢å æ¹æ¥çWeb项ç®ãä½ å¯ä»¥ä¸ç解é£äºé ç½®é½æ¯ä»ä¹å«ä¹ï¼ä»¥å为ä»ä¹è¦è¿ä¹åï¼è¿äºççåé¢ä½ å»äºè§£ãä½ä½ ä¸å®è¦å¯ä»¥å¿«éçå©ç¨å®ä»¬ä¸ä¸ªæ建åºä¸ä¸ªWebæ¡æ¶ï¼ä½ å¨æ建SSMçè¿ç¨ä¸ï¼å¯è½ä¼ç»å¸¸æ¥è§¦å°ä¸ä¸ªå«mavençå·¥å ·ãè¿ä¸ªå·¥å ·ä¹æ¯ä½ 以åå·¥ä½å½ä¸å ä¹æ¯å¿ é¡»è¦ä½¿ç¨çå·¥å ·ï¼æä»¥ä½ å¨æ建SSMçè¿ç¨ä¸ï¼ä¹å¯ä»¥é¡ºä¾¿äºè§£ä¸ä¸mavençç¥è¯ãå¨ä½ ç®åè¿ä¸ªé¶æ®µï¼ä½ åªéè¦å¨ç½ç»ä¸äºè§£ä¸ä¸mavenåºæ¬ç使ç¨æ¹æ³å³å¯ï¼ä¸äºé«ç«¯çç¨æ³éçä½ å·¥ä½ç»éªçå¢å ï¼ä¼éæ¸æ¥è§¦å°çã
6ãä½ éè¦å»çä¸äºJDKä¸çç±»çæºç ï¼ä¹å æ¬ä½ æ使ç¨çæ¡æ¶çæºç ãè¿äºæºç è½çæçåææ¯ï¼ä½ å¿ é¡»å¯¹è®¾è®¡æ¨¡å¼é常äºè§£ãå¦åçè¯ï¼ä½ çæºç çè¿ç¨ä¸ï¼æ°¸è¿ä¼æè¿æ ·é£æ ·ççé®ï¼è¿æ®µä»£ç 为ä»ä¹è¦è¿ä¹åï¼ä¸ºä»ä¹è¦å®ä¹è¿ä¸ªæ¥å£ï¼å®çèµ·æ¥å¥½åå¾å¤ä½ï¼ç±æ¤ä¹å¯ä»¥çåºï¼è¿äºå¦ä¹ çè¿ç¨æ¯ç¯ç¯ç¸æ£çï¼å¦æä½ ä»»ä½ä¸ä¸ªé¶æ®µæä¸æ¥äºï¼é£ä¹ä½ å°±ççè·ä¸ä¸äºï¼æè 说æ¯ä¸æ¥æ ¢æ¥æ¥æ ¢ãæ»èè¨ä¹ï¼è¿ä¸ªé¶æ®µï¼ä½ éè¦åçæ¯æ·±å ¥äºè§£Javaåºå±åJavaç±»åºï¼æ¯å¦å¹¶åé£æ¬ä¹¦å°±æ¯Java并åå java.concurrentçå 容ï¼ï¼ä¹å°±æ¯JVMåJDKçç¸å ³å 容ãèä¸è¿è¦æ´æ·±å ¥çå»äºè§£ä½ æ使ç¨çæ¡æ¶ï¼æ¹å¼æ¯è¾æ¨èçæºç æè çå®æ¹ææ¡£ã
å¸æ对æ¨ææ帮å©ï¼~
å¹´ï¼å端ï¼ç§»å¨å¼åï¼å端ï¼æ该éåªä¸ªï¼è¯·å ç»åºæç¡®çå¤ï¼æ¨èéå端å¼åï¼webå端å¯ä»¥è¯´åéä¸å¯ééï¼
解éåå ï¼
ç°å¨çWebå端ææ¯å¯ä»¥è¯´æ¯è¶æ¥è¶æçäºï¼Webå端å¸åºä¹é常çç«çï¼Webå端人æä¹æ¯å¼å¸¸ç紧缺ãåè ï¼ç±äºäºèç½çå´èµ·ï¼Webå端ææ¯çä¸æåå±ï¼ä¹å æ®äºäºèç½çä¸å¸ä¹å°ã
é£ä¸ºä»ä¹è¯´Webå端æ å¯ééå¢ï¼å½å¤èåçèªåªä½å¹³å°facebookï¼ç¸ä¿¡å¤§å®¶å¤å¤å°å°ç¥éä¸ç¹ï¼ä¹ç¨è¿ä¸ç¹ï¼å®å°±æ¯Webå端ææ¯ç产ç©ï¼å®å ¨åºäºå端æ¡æ¶æé åºæ¥çå¹³å°ãåè ï¼å¤§å®¶å¸¸ç¨çå¤åå¹³å°é¥¿äºä¹ï¼å®æä¸çé¨å产åå°±æ¯åºäºWebå端ææ¯çãåæ·å®ï¼ç¾åº¦ï¼é¿éççï¼é½å·²ç»å°Webå端ææ¯æå ¥å°äºèªå·±ç产åä¸ã
å端å¼åè¡ä¸èªèµæ°´å¹³åä¸æ¶¨è¶å¿ï¼Webå端å¼åæ©å·²ä¸æ¯å带å¨ç»çä¸æèåçæ¶ä»£äºï¼ä»ä»¬å·²æ为äºèç½ä¸»å®°è ï¼åè¡ä¸é½ç¨å ¶å¼åäºèç½åºç¨ãä½ç®åæ´äºèç½è¡ä¸çWebå端å¼åå·¥ç¨å¸ç´§ä¿ï¼ä¼ä¸æ£é«èªæ±æï¼èªèµå¾ éä¸æ¶¨å涨ï¼
Webå端ææ¯å¯ä»¥è¯´æ¯è¶æ¥è¶æçäºï¼Webå端å¸åºä¹é常çç«çï¼Webå端人æä¹æ¯å¼å¸¸ç紧缺ãåè ï¼Webå端è¡ä¸ä¹æ¯æ å¯ééãç±äºäºèç½çå´èµ·ï¼Webå端ææ¯çä¸æåå±ï¼ä¹å æ®äºäºèç½çä¸å¸ä¹å°ã
Webå端å¼åå·¥ç¨å¸å·²ç»æ为åå±ä¸çèä¸é¦é¦é¦ãå ä¹æ´ä¸ªäºèç½è¡ä¸é½ç¼ºWebå端工ç¨å¸ï¼æ 论æ¯åèµ·æ¥çåä¸å ¬å¸ï¼è¿æ¯ä¸å¸å ¬å¸ä¹è³å·¨å¤´ï¼ç©ºç¼ºä¸æ ·åå¨ãä¼ç§çWebå端工ç¨å¸ç®ç´æ¯å¤§çç«è¿ç¨å°ã
ææ 解å³åæ³ï¼æ以ï¼è¿æ¯å¾æ¨èä½ å¦ä¹ webå端çï¼å¦æççæ³å¦ä¹ ï¼å¯ä»¥äºè§£ä¸ä¸å京å°å¦å ï¼æ们æ¯ä¸é¨åç¼ç¨å¹è®çï¼æ¥ææå ¶ä¸°åçå¸èµåéï¼å¸¦ç»ä½ ä¸ä¸æ ·çå¦ä¹ ä½éªãå享ä¸ä¸å端çç¥è¯æ¡æ¶ï¼å¸æå¯¹ä½ ææ帮å©ï¼
elementui源码学习之仿写一个el-timeline
本文记录了仿写el-timeline组件的细节,以深入理解饿了么UI组件的实现机制。本系列文章将持续更新,linux c库源码深入探讨elementui源码的学习与实践。可访问开源仓库,通过npm start运行代码,结合注释辅助理解。
时间线组件构成包括:时间线小圆点、时间线竖线条、时间戳与具体内容详情四个部分。如图所示。
时间线组件主要需求包括:按时间线正序或倒序展示、自定义时间线小圆点样式与颜色、使用小图标替代时间线小圆点、控制时间戳与具体内容详情的手机文章网站源码位置、时间戳的显示与隐藏。
对官方组件的见解包括:提供与注入可以简化、时间戳位置优化、简约封装参考其他库组件。Antd与iview的时间线组件参数较为精简。
回顾知识点:数组方法的使用,如this.$slots.default.reverse();以及`:style`中的四元表达式应用,如`:style="border: ${ elementIcon} ${ borderColor}"`。
组件代码示例如下:`myTimeline`、`myTimelineItem`。完整代码在开源仓库,欢迎访问并star。c 框架源码下载
若本文对您有所助益,期待您的star,感谢支持!
dayjs源码解析(一):概念、locale、constant、utils tags
深入剖析 Day.js 源码(一):概念、locale、constant、utils
Day.js 是一款轻量级的时间库,由饿了么的开发大佬 iamkun 维护,主打无需引入过多依赖,以减少打包体积的特性。本文将通过解析 Day.js 的源码,揭示其结构与功能的奥秘,旨在为开发者提供深入理解与应用 Day.js 的工具。
目录概览
本文将分五章展开 Day.js 的源码解析,分别从代码结构、基础概念、时间标准、语言(文化)代码以及 locale、constant、utils 的实现进行深入探讨。我们将逐步揭开 Day.js 的核心逻辑与设计思路。
代码结构与依赖分析
Day.js 的源代码目录结构简洁明了,主要依赖集中在入口文件 src/index.js 中。此文件依赖链简单,未直接引用 locale 和 plugin 目录下的语言包与插件,体现出 Day.js 优化体积、按需加载的核心优势。
基础概念与时间标准
在解析源码之前,理解以下基础概念至关重要,包括时间标准、GMT、UTC、ISO 等。这些标准与概念为后续分析提供了背景知识。
时间标准解释
格林尼治平均时间(GMT)与协调世界时(UTC)是本文中的核心时间概念。GMT 作为本初子午线上的平太阳时,而 UTC 则是基于原子时标准,与格林威治标准时间(GTM)关系密切。本文详细解释了 UTC 的定义、用途与与 0 度经线平太阳时的关系。
ISO 标准
ISO 是国际标准化组织推荐的日期和时间表示方法。在 JavaScript 中,Date.prototype.toISOString() 方法返回遵循 ISO 标准的字符串,以 UTC 时间为基准。
语言(文化)代码与 locale
不同语言对时间的描述各具特色,Day.js 通过 locale 实现了多语言支持,用户可根据需求引入相应的语言包。本文介绍了语言代码与 locale 的关联,以及如何按需加载特定语言。
constant 与 utils
src/constant.js 和 src/utils.js 分别负责存储常量与工具函数。constant 文件中包含了时间单位与格式化的正则表达式,而 utils.js 则封装了一系列实用工具函数,用于简化时间操作。
总结与展望
本文完成了 Day.js 源码解析的第一部分,深入探讨了概念、locale、constant、utils 的实现。接下来,我们将分析 Day.js 的核心文件 src/index.js,解析 Dayjs 类的实现细节。欢迎关注后续内容,期待与您共同探索 Day.js 的更多奥秘。