当前位置: 首页 > Web前端 > JavaScript

【精】现代前端框架的重要概念

时间:2023-03-27 01:10:05 JavaScript

寰堝鍒濆鑰呯粡甯镐細闂€滄垜闇€瑕佸涔犲摢涓鏋讹紵鈥濆拰鈥滃涔犳鏋跺墠闇€瑕佹帉鎻″灏慗S鎴朤S锛熲€濇棤鏁板甫鏈変富瑙傝壊褰╃殑鏂囩珷閮藉湪瀹f壃浣滆€呮洿鍠滄妗嗘灦鎴栧簱鐨勪紭鍔匡紝鑰屼笉鏄悜璇昏€呭睍绀哄叾鑳屽悗鐨勬蹇碉紝浠ュ仛鍑烘洿鏄庢櫤鐨勫喅瀹氥€傞偅涔堟垜浠厛鏉ヨВ鍐崇浜屼釜闂銆傚湪瀛︿範妗嗘灦涔嬪墠锛屼綘闇€瑕佹帉鎻″灏慗S鎴朤S锛熷敖鍙兘澶氬湴瀛︿範锛屼互渚挎偍鍙互鏇村ソ鍦扮悊瑙e畠浠墍鍩轰簬鐨勬蹇点€傛偍闇€瑕佷簡瑙e熀鏈暟鎹被鍨嬨€佸嚱鏁般€佸熀鏈繍绠楃鍜屾枃妗e璞℃ā鍨?DOM)锛屽畠鏄疕TML鍜孋SS鐨凧S琛ㄧず銆傚叾浠栦竴鍒囬兘鍙互锛屼絾骞朵笉涓ユ牸瑕佹眰绮鹃€氭鏋舵垨搴撱€傚鏋滀綘鏄竴涓柊鎵嬶紝鐚殑JS搴旇鏄竴涓緢濂界殑璧风偣銆傜户缁涔犵洿鍒颁綘鎰熷埌鑷俊锛岀劧鍚庣户缁涔犵洿鍒颁綘鍐嶆鎰熷埌鑷俊銆傚綋浣犲JS/TS鏈変簡瓒冲鐨勪簡瑙e悗锛屼綘灏卞彲浠ュ紑濮嬪涔犳鏋朵簡銆傛偍鍙互骞惰瀛︿範鐨勫叾浠栫煡璇嗐€傛湁鍝簺閲嶈姒傚康State锛堢姸鎬侊級Effects锛堝壇浣滅敤锛塎emoization锛堣蹇嗭級Templatingandrendering锛堟ā鏉垮拰娓叉煋锛夋墍鏈夌幇浠f鏋堕兘浠庤繖浜涙蹇典腑娲剧敓鍑哄畠浠殑鍔熻兘stateState鍙槸涓轰綘鐨勫簲鐢ㄧ▼搴忔彁渚涘姩鍔涚殑鏁版嵁銆傚畠鍙兘澶勪簬鍏ㄥ眬绾у埆锛岄€傜敤浜庡簲鐢ㄧ▼搴忕殑澶у鏁扮粍浠讹紝鎴栭€傜敤浜庡崟涓粍浠躲€備笅闈㈡垜浠啓涓€涓畝鍗曠殑璁℃暟鍣ㄤ緥瀛愭潵璇存槑銆傚畠淇濈暀鐨勮鏁版槸state銆傛垜浠彲浠ヤ粠鐘舵€佽鍙栨垨鍐欏叆鐘舵€佷互澧炲姞璁℃暟鏈€绠€鍗曠殑琛ㄧず閫氬父鏄竴涓彉閲忥紝鍏朵腑鍖呭惈鎴戜滑鐨勭姸鎬佹墍鍖呭惈鐨勬暟鎹細璁╄鏁?0锛沜onstincrement=()=>{count++;};constbutton=document.createElement('button');button.textContent=count;button.addEventListener('鐐瑰嚮',閫掑);鏂囨。.body.appendChild锛堟寜閽級锛涗絾鏄繖娈典唬鐮佹湁涓€涓棶棰橈細鍍忚皟鐢╥ncrement鏂规硶閭f牱淇敼count鐨勫€间笉浼氳嚜鍔ㄤ慨鏀规寜閽殑鏂囧瓧銆傛垜浠渶瑕佹墜鍔ㄦ洿鏂版墍鏈夌殑鍐呭锛屼絾鏄繖绉嶆柟寮忓浜庝唬鐮佸湪澶嶆潅鍦烘櫙涓嬬殑鍙淮鎶ゆ€у拰鍙墿灞曟€т笉鏄緢濂姐€傝鏁拌嚜鍔ㄦ洿鏂颁緷璧栨秷璐硅€呯殑鑳藉姏绉颁负鍙嶅簲鎬с€傝繖鏄€氳繃璁㈤槄骞堕噸鏂拌繍琛屽簲鐢ㄧ▼搴忕殑璁㈤槄閮ㄥ垎鏉ユ洿鏂扮殑銆傚嚑涔庢墍鏈夌幇浠e墠绔鏋跺拰搴撻兘鍏锋湁浣跨姸鎬佸搷搴旂殑鑳藉姏銆傚熀鏈笂鍙互鍒嗕负3绉嶈В鍐虫柟妗堬紝鑷冲皯浣跨敤鍏朵腑鐨勪竴绉嶆垨澶氱鏉ュ疄鐜拌繖绉嶈兘鍔涳細Observables/Signals锛堝彲瑙傚療/淇″彿锛夈€丷econciliationofimmutableupdates锛堝崗璋冧笉鍙彉鏇存柊锛夈€乀ranspilation锛堢炕璇戯級杩欎簺姣旇緝鍚堥€傜洿鎺ョ敤鑻辨枃琛ㄨ揪姒傚康馃Observables/Signals锛堝彲瑙傚療/淇″彿锛塐bservables鍩烘湰涓婃槸鍦ㄨ鍙栫姸鎬佺殑鏃跺€欓€氳繃璁㈤槄鐨勬柟寮忔敹闆嗕緷璧栵紝鐒跺悗鍦ㄦ洿鏂扮殑鏃跺€欒Е鍙戜緷璧栫殑鏇存柊conststate=(initialValue)=>({_value:initialValue,get:function(){/*subscribe*/;returnthis._value;},set:function(value){this._value=value;/*triggerupdate*/;}});knockout鏄渶鏃╀娇鐢ㄧ殑妗嗘灦涔嬩竴杩欎釜姒傚康锛屽畠浣跨敤鐩稿悓鐨勫嚱鏁帮紝甯?涓嶅甫鍙傛暟杩涜鍐?璇昏闂繖绉嶆ā寮忔渶杩戝紑濮嬬敱Solid.js鍜宲reactsignals绛夋鏋跺疄鐜帮紱Vue鍜孲velte涓篃浣跨敤浜嗙浉鍚岀殑妯″紡銆俁xJS涓篈ngular鐨勫弽搴斿眰鎻愪緵浜嗗簳灞傚姛鑳斤紝杩欐槸涓€绉嶈秴瓒婄畝鍗曠姸鎬佺殑妯″紡鐨勬墿灞曘€係olid.js浣跨敤Stores锛堢敱setter鏂规硶鎿嶄綔鐨勫璞★級鏉ヨ繘涓€姝ユ娊璞′俊鍙稲econciliationofimmutablestates锛堝崗璋冧笉鍙彉鏇存柊锛夈€備笉鍙樻€ф槸鎸囧鏋滃璞$殑鏌愪釜灞炴€у彂鐢熷彉鍖栵紝閭d箞鏁翠釜瀵硅薄鐨勫紩鐢ㄥ氨浼氬彂鐢熷彉鍖栥€傛墍浠ュ崗璋冨櫒鍋氱殑灏辨槸閫氳繃绠€鍗曠殑寮曠敤姣旇緝鏉ュ垽鏂璞℃槸鍚﹀彂鐢熶簡鍙樺寲conststate1={todos:[{text:'understandimmutability',complete:false}],currentText:''};//鏇存柊currentText灞炴€onststate2={todos:state1.todos,currentText:'understandreconciliation'};//娣诲姞涓€涓猼odoconststate3={todos:[state1.todos[0],{text:'understandreconciliation',complete:true}],currentText:''};//鐢变簬涓嶅彲鍙樻€э紝杩欓噷浼氭姤閿檚tate3.currentText='Iamnotimmutable!';濡傛偍鎵€瑙侊紝閲嶆柊浣跨敤浜嗗鏈洿鏀归」鐨勫紩鐢ㄣ€傚鏋滃崗璋冨櫒妫€娴嬪埌涓嶅悓鐨勫璞″紩鐢紝瀹冨皢閲嶆柊杩愯鎵€鏈夌粍浠讹紝浠ヤ究鎵€鏈夌粍浠剁姸鎬侊紙閬撳叿銆佸蹇樺綍銆佹晥鏋溿€佷笂涓嬫枃锛変娇鐢ㄦ渶鏂扮殑瀵硅薄銆傜敱浜庤鍙栬闂槸琚姩鐨勶紝鍥犳闇€瑕佹墜鍔ㄦ寚瀹氬鍝嶅簲鍊肩殑渚濊禆鎬с€傛樉鐒讹紝鎮ㄤ笉浼氫互杩欑鏂瑰紡瀹氫箟鐘舵€併€傛偍瑕佷箞浠庣幇鏈夊睘鎬ф瀯寤虹姸鎬侊紝瑕佷箞浣跨敤缂╁噺鍣ㄦ瀯寤虹姸鎬併€俽educer鍑芥暟鎺ュ彈涓€涓姸鎬佸璞″苟杩斿洖涓€涓柊鐨勭姸鎬佸璞°€俽eact鍜宲react浣跨敤杩欑妯″紡銆傚畠閫傚悎涓巚DOM涓€璧蜂娇鐢紝鎴戜滑灏嗗湪绋嶅悗鎻忚堪妯℃澘鏃舵帰璁ㄥ畠銆傚苟闈炴墍鏈夋鏋堕兘鍦╲DOM鐨勫府鍔╀笅浣跨姸鎬佸畬鍏ㄥ搷搴斻€傛瘮濡侻ithril.JS鍦ㄧ姸鎬佷慨鏀瑰悗娌℃湁瑙﹀彂鐩稿簲鐨勭敓鍛藉懆鏈熶簨浠讹紝鎴栬€呮墜鍔ㄨ皟鐢╩.redraw()鏂规硶锛屽氨鍙互瑙﹀彂鏇存柊銆俆ranspilation锛堢炕璇戯級Transpilation姝e浜庢瀯寤洪樁娈点€傞噸鍐欐垜浠殑浠g爜锛岃浠g爜鍙互鍦ㄦ棫鐗堟祻瑙堝櫒涓繍琛岋紝鎴栬€呰祴浜堜唬鐮佸叾浠栬兘鍔涳紱鍦ㄨ繖绉嶆儏鍐典笅锛岃浆璇戠敤浜庝慨鏀逛綔涓哄弽搴旂郴缁熶竴閮ㄥ垎鐨勭畝鍗曞彉閲忋€係velte鍩轰簬缈昏瘧鍣紝閫氳繃鐪嬩技绠€鍗曠殑鍙橀噺澹版槑鍜岃闂紝涔熶负浠栦滑鐨勫搷搴斿紡绯荤粺鎻愪緵浜嗚兘鍔涘彟澶栵紝Solid.js涔熶娇鐢ㄤ簡Transpilation锛屼絾鏄疶ranspilation鍙敤鍦ㄦā鏉夸笂锛屼笉浼氱敤鍦ㄧ姸鎬丒ffects涓婏紝澶у鏁版儏鍐典笅锛屾垜浠渶瑕佸仛鐨勬洿澶氭槸鎿嶄綔鍝嶅簲寮忕姸鎬侊紝鑰屽緢灏戦渶瑕佹搷浣滃熀浜庣姸鎬佺殑DOM娓叉煋銆傛垜浠渶瑕佺鐞嗗壇浣滅敤銆傝繖浜涘壇浣滅敤閮芥槸鐢变簬瑙嗗浘鏇存柊浠ュ鐨勭姸鎬佸彉鍖栬€屽彂鐢熺殑浜嬫儏锛堝敖绠℃湁浜涙鏋朵篃灏嗚鍥炬洿鏂拌涓哄壇浣滅敤锛屼緥濡係olid.js锛夈€傝璁颁綇锛屽湪鍓嶉潰鐨勭姸鎬佺ず渚嬩腑锛屾垜浠晠鎰忓皢璁㈤槄鎿嶄綔鐨勪唬鐮佺暀绌恒€傜幇鍦ㄨ鎴戜滑灏嗚繖浜涚暀绌轰互澶勭悊鍓綔鐢紝浠ヤ究绋嬪簭鍙互鍝嶅簲鏇存柊constcontext=[];conststate=(initialValue)=>({_subscribers:newSet(),_value:initialValue,get:function(){constcurrent=context.at(-1);if(current){this._subscribers.add(current);}returnthis._value;},set:function(value){if(this._value===value){return;}this._value=value;this._subscribers.forEach(sub=>sub())};}});consteffect=(fn)=>{constexecute=()=>{context.push(execute);灏濊瘯{fn();}鏈€鍚巤context.pop();}};鎵ц锛堬級;};涓婇潰鐨勪唬鐮佸熀鏈笂鏄痯reactsignals鎴栬€匰olid.jsreactivestate鐨勭畝鍖栫増锛屽畠涓嶅寘鍚敊璇鐞嗗拰澶嶆潅鐨勭姸鎬佸鐞嗭紙浣跨敤鍑芥暟鎺ユ敹鍓嶄竴涓姸鎬佸€硷紝杩斿洖涓嬩竴涓姸鎬佸€硷級锛屼絾鏄繖浜涘緢瀹规槗娣诲姞銆傝繖鍏佽鎴戜滑浣垮墠闈㈢殑绀轰緥鎴愪负鍙嶅簲寮忕殑锛歝onstcount=state(0);constincrement=()=>count.set(count.get()+1);constbutton=document.createElement('button');effect(()=>{button.textContent=count.get();});button.addEventListener('click',increment);document.body.appendChild(button);鈽濇偍鍙互灏濊瘯杩愯浠ヤ笅涓や釜浠g爜浠ヤ笂鏁堟灉Blockexample锛屾簮鐮佸湴鍧€鍦ㄥぇ澶氭暟鎯呭喌涓嬶紝妗嗘灦鍏佽Effect鍦ㄤ笉鍚岀敓鍛藉懆鏈熸覆鏌揇OM涔嬪墠銆佹湡闂存垨涔嬪悗杩愯Memoization銆傝蹇嗗寲鏄寚缂撳瓨鐘舵€佸€肩殑璁$畻缁撴灉锛屾敼鍙樼粨鏋滄洿鏂版椂闂寸殑渚濊禆鎬с€傚畠鍩烘湰涓婃槸涓€涓繑鍥炴淳鐢熺姸鎬佺殑Effect銆傚湪涓€浜涙鏋朵腑锛屾瘮濡俽eact銆乸react锛屽畠浼氶噸鏂拌繍琛屽畠鐨勭粍浠跺嚱鏁帮紝浠庤€岄伩鍏嶈繖閮ㄥ垎缁勪欢鍦ㄥ畠鎵€渚濊禆鐨勭姸鎬佹病鏈夋敼鍙樼殑鎯呭喌涓嬭閲嶆柊娓叉煋銆傚浜庡叾浠栨鏋讹紝鎯呭喌鎭版伆鐩稿弽锛氬畠鍏佽鎮ㄩ€夋嫨缁勪欢鐨勪竴閮ㄥ垎杩涜鍙嶅簲寮忔洿鏂帮紝鍚屾椂缂撳瓨浠ュ墠鐨勮绠椼€傚浜庢垜浠畝鍗曠殑鍝嶅簲寮忕郴缁燂紝memo澶ц嚧鏄繖鏍峰疄鐜扮殑constmemo=(fn)=>{letmemoized;effect(()=>{if(memoized){memoized.set(fn());}else{memoized=state(fn());}});returnmemoized.get;};妯℃澘鍜屾覆鏌撶幇鍦ㄦ湁鎴戜滑鎯宠鏄剧ず缁欑敤鎴风殑鍘熷銆佹淳鐢熷拰缂撳瓨鐘舵€併€傚湪鎴戜滑鐨勪緥瀛愪腑锛屾垜浠洿鎺ユ搷浣淒OM鏉ユ坊鍔犳寜閽苟鏇存柊鎸夐挳鐨勫唴瀹规枃鏈€備负浜嗘敼鍠勫紑鍙戜綋楠岋紝鍑犱箮鎵€鏈夌幇浠f鏋堕兘鏀寔DSL鍦ㄤ唬鐮佷腑缂栧啓绫讳技浜庢墍闇€杈撳嚭鐨勫唴瀹广€傝櫧鐒舵湁涓嶅悓鐨勯鏍硷紝渚嬪.jsx銆?vue銆?svelte鏂囦欢锛屼絾褰掓牴缁撳簳閮芥槸鐢ㄧ被浼糎TML鐨勪唬鐮佽〃绀篋OM銆傛墍浠ュ熀鏈笂

Hello,World
//鍦ㄤ綘鐨凧S浠g爜涓?/鍙樻垚浜嗕綘鐨凥TML锛?div>Hello,World
浣犲彲鑳戒細闂細鈥滄垜鐨勭姸鎬佹斁鍦ㄥ摢閲岋紵鈥濄€傚緢濂界殑闂锛屽ぇ閮ㄥ垎鏃跺€欑敤{}琛ㄧず灞炴€у拰鑺傜偣涓殑鍔ㄦ€佸唴瀹广€傛渶甯哥敤鐨凧S妯℃澘璇█鎵╁睍鏃犵枒鏄疛SX銆傚湪React涓紝瀹冭缂栬瘧涓虹函JavaScript璇█锛屽厑璁稿垱寤篋OM鐨勮櫄鎷熻〃绀猴紝閫氬父绉颁负鈥滆櫄鎷熸枃妗e璞♀€濇垨绠€绉颁负vDOM銆傝繖鏄熀浜庡垱寤篔S瀵硅薄姣旇闂瓺OM蹇緱澶氱殑鍓嶆彁锛屾墍浠ュ鏋滃彲浠ョ敤鍒涘缓JS瀵硅薄浠f浛璁块棶DOM锛屽氨鍙互鑺傜渷鏃堕棿銆備絾鏄紝濡傛灉鎮ㄧ殑椤圭洰鍦ㄤ换浣曟儏鍐典笅閮戒笉浼氳繘琛屽ぇ閲廌OM淇敼鎴栧彧鏄垱寤轰笉闇€瑕佷慨鏀圭殑瀵硅薄锛涢偅涔堜笂杩拌В鍐虫柟妗堢殑浼樺娍灏变細鍙樻垚鍔e娍锛岃繖鏃跺氨闇€瑕佷娇鐢╩emoization灏嗗姡鍔跨殑褰卞搷闄嶅埌鏈€浣庛€?/1.婧愪唬鐮?div>Hello,{name}
//2.缈昏瘧鎴恓s浠g爜createElement("div",null,"Hello,",name);//3.js鎵ц鍚庤繑鍥瀘bject{"$$typeof":Symbol(react.element),"type":"div","key":null,"ref":null,"props":{"children":"Hello,World"},"_owner":null}//4.Rendervdom/*HTMLDivElement*/
Hello,World
JSX涓嶄粎鍦╮eact涓娇鐢紝鍦⊿olid.js涓篃鏈変娇鐢ㄣ€備緥濡傦紝浣跨敤Solid杞瘧鍣ㄥ皢浠g爜鏀瑰緱鏇村畬鏁?/1.婧愪唬鐮?div>Hello,{name()}
//2.杞瘧涓簀s浠g爜const_tmpl$=/*#__PURE__*/_$template(`
浣犲ソ锛?/div>`,2);(()=>{const_el$=_tmpl$.cloneNode(true),_el$2=_el$.firstChild;_$insert(_el$,name,null);return_el$;})();//3.Rendervdom/*HTMLDivElement*/
Hello,World
铏界劧缈昏瘧鍚庣殑浠g爜涓€寮€濮嬪彲鑳界湅璧锋潵寰堝悡浜猴紝浣嗘槸鏇村鏄撹В閲婂叾涓唬鐮佺殑閫昏緫銆傞鍏堬紝鍒涘缓妯℃澘鐨勯潤鎬侀儴鍒嗭紱鐒跺悗锛屽厠闅嗗垱寤虹殑瀵硅薄骞跺垱寤轰竴涓柊瀹炰緥锛屽叾涓寘鍚坊鍔犵殑鍔ㄦ€侀儴鍒嗭紝鍔ㄦ€侀儴鍒嗙殑鏇存柊涓庣姸鎬佹洿鏂扮浉鍏宠仈銆係velte鍦ㄧ炕璇戠殑鏃跺€欏仛浜嗘洿澶氱殑宸ヤ綔锛屼笉浠呭鐞嗘ā鏉匡紝杩樺鐞嗙姸鎬?/1.婧愮爜
Hello,{name}
//2.杞垚js浠g爜/*鐢熸垚鑷猄veltev3.55.0鐗堟湰*/import{SvelteComponent,append,detach,element,init,insert,noop,safe_not_equal,set_data,text}鏉ヨ嚜鈥渟velte/internal鈥濓紱functioncreate_fragment(ctx){letdiv;璁﹖0;璁﹖1;return{c(){div=element("div");t0=text("浣犲ソ锛?);t1=鏂囨湰(/*鍚嶇О*/ctx[0]);},m(target,anchor){insert(target,div,anchor);杩藉姞锛坉iv锛宼0锛夛紱杩藉姞锛坉iv锛宼1锛夛紱},p(ctx,[鑴廬){if(dirty&/*name*/1)set_data(t1,/*name*/ctx[0]);},i:noop,o:noop,d(鍒嗙){if(鍒嗙)鍒嗙(div);}};}鍑芥暟瀹炰緥($$self,$$props,$$invalidate){letname='World';setTimeout(()=>{$$invalidate(0,name='you');},1000);return[name];}classComponentextendsSvelteComponent{constructor(options){super();鍒濆鍖栵紙杩欎釜锛岄€夐」锛屽疄渚嬶紝create_fragment锛宻afe_not_equal锛寋}锛夛紱}}exportdefaultComponent;//3.鎵цJS浠g爜/*HTMLDivElement*/
Hello,World
褰撶劧涔熸湁渚嬪锛屽湪Mithril.js涓紝铏界劧鍙互浣跨敤JSX锛屼絾鏄紦鍔变綘浣跨敤鍐橨S浠g爜//1.婧愮爜constHello={name:'World',oninit:()=>setTimeout(()=>{Hello.name='you';m.redraw();},1000),鏌ョ湅:()=>m('div','Hello,'+Hello.name+'!')};//2.鎵цJS浠g爜/*HTMLDivElement*/
Hello,World
鏈変汉璁や负杩欐牱鍋氱殑寮€鍙戜綋楠屼笉鏄緢濂藉ソ鍚э紝浣嗘湁浜涗汉鏇村枩娆㈠浠栦滑鐨勪唬鐮佹湁鏇村鐨勬帶鍒舵潈銆傛牴鎹粬浠兂瑕佽В鍐崇殑闂绫诲瀷锛屼笉杩涜杞瘧涔熷彲鑳芥槸涓€涓紭鍔裤€傝澶氬叾浠栨鏋朵篃鍏佽鍦ㄤ笉杩涜杞瘧鐨勬儏鍐典笅浣跨敤锛屽敖绠″緢灏戞湁浜烘帹鑽愬畠銆傗€滄垜鐜板湪搴旇瀛︿範浠€涔堟鏋舵垨鑰呭簱锛熲€濇垜鏈変竴浜涘ソ娑堟伅鍜屼竴浜涘潖娑堟伅瑕佸憡璇変綘銆傚潖娑堟伅鏄細娌℃湁鐏典腹濡欒嵂銆傛病鏈変竴涓鏋跺湪鎵€鏈夊眰闈笂閮芥瘮鍙︿竴涓洿濂姐€備换浣曟鏋堕兘鏈夊叾浼樼偣鍜屽Ε鍗忋€俁eact鏈夊畠鐨刪ook瑙勫垯锛孉ngular缂哄皯绠€鍗曠殑淇″彿锛孷ue鏈夊悜鍚庡吋瀹规€ч棶棰橈紝Svelte涓嶈兘寰堝ソ鍦版墿灞曪紝Solid.js绂佹瑙f瀯锛孧ithril.js涓嶆槸鐪熸鐨勫搷搴斿紡绛夌瓑銆傚ソ娑堟伅鏄細娌℃湁閿欓€夋嫨-闄ら潪椤圭洰鐨勮姹傚湪鎹嗙粦鍖呭ぇ灏忓拰鎬ц兘鏂归潰纭疄鍙楀埌闄愬埗銆傛瘡涓鏋堕兘鍙互瀹屾垚宸ヤ綔銆傛湁浜涗汉鍙兘闇€瑕佽В鍐充粬浠殑璁捐鍐崇瓥锛岃繖鍙兘浼氬噺鎱㈡偍鐨勯€熷害锛屼絾鏃犺濡備綍鎮ㄥ皢鑳藉鑾峰緱鍙鐨勭粨鏋溿€傝瘽铏借繖涔堣锛屾病鏈夋鏋朵篃鍙兘鏄竴涓彲琛岀殑閫夋嫨銆傝澶氶」鐩洜杩囧害浣跨敤JavaScript鑰屾瘉浜庝竴鏃︼紝鑰屽叿鏈変竴瀹氫氦浜掓€х殑闈欐€侀〉闈㈠彲浠ヨ儨浠昏繖椤瑰伐浣溿€傛棦鐒舵偍浜嗚В浜嗚繖浜涙鏋跺拰搴撴墍搴旂敤鐨勬蹇碉紝璇烽€夋嫨鏈€閫傚悎鎮ㄦ墜澶翠换鍔$殑涓€涓€備笉瑕佹媴蹇冧负鎮ㄧ殑涓嬩竴涓」鐩€夋嫨妗嗘灦銆備綘涓嶉渶瑕佸涔犳墍鏈夌殑涓滆タ銆傚鏋滄偍姝e湪灏濊瘯涓€涓柊妗嗘灦锛屾垜鍙戠幇鏈€鏈夊府鍔╃殑浜嬫儏涔嬩竴灏辨槸鍏虫敞瀹冪殑绀惧尯锛屾棤璁烘槸鍦ㄧぞ浜ゅ獟浣撱€丏iscord銆乬ithub杩樻槸鍏朵粬鍦版柟銆備粬浠彲浠ュ憡璇夋偍鍝簺鏂规硶閫傚悎浠栦滑鐨勬鏋讹紝杩欏皢甯姪鎮ㄦ洿蹇湴鑾峰緱鏇村ソ鐨勮В鍐虫柟妗堛€傛潵鍚э紝浣犲彲浠ユ湁鑷繁鐨勫枩濂斤紒濡傛灉浣犵殑涓昏鐩爣鏄氨涓氾紝鎴戝缓璁涔燫eact鎴朧ue銆傚鏋滄偍鎯宠绠€鍗曠殑鎬ц兘鍜屾帶鍒朵綋楠岋紝璇峰皾璇昐olid.js锛屼絾璇疯浣忔墍鏈夊叾浠栭€夐」鍚屾牱鏈夋晥銆備綘涓嶅簲璇ュ洜涓烘垜杩欎箞璇村氨閫夋嫨涓€涓鏋讹紝浣犲簲璇ヤ娇鐢ㄦ渶閫傚悎浣犵殑妗嗘灦銆傚鏋滄偍闃呰浜嗘暣绡囨枃绔狅紝鎰熻阿鎮ㄧ殑鑰愬績绛夊緟銆傚笇鏈涘浣犳湁甯姪銆傚湪杩欓噷鍙戣〃浣犵殑璇勮锛岀浣犳湁缇庡ソ鐨勪竴澶煂瑰弬鑰冩枃绔燵](https://dev.to/lexlohr/concep...)https://dev.to/lexlohr/concep...[](https://github.com/zidanDirk/...)https://github.com/zidanDirk/...