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

day40语法扩展:使用JSX做语法扩展

时间:2023-03-27 15:18:52 JavaScript

绫籋TML鍏冪礌JSX瀛楅潰閲忕敤灏栨嫭鍙峰垎闅斻€傛瘮濡備笅闈㈢殑

鏍囩灏辨槸涓€涓畝鍗曠殑渚嬪瓙銆傝繖鏍凤紝鎴戜滑灏卞垱寤轰簡涓€涓猂eact鏍囬鍏冪礌銆倂artitle=椤甸潰鏍囬

;浣嗘槸鎴戜滑鐭ラ亾JS寮曟搸鏃犳硶鐞嗚В鍍忎笂闈㈣繖鏍风殑鏍囩锛岄偅鎬庝箞杩愯鍛紵杩欐椂鍊欐垜浠彲浠ュ厛閫氳繃涓婁竴璁叉彁鍒扮殑Babel灏咼SX琛ㄨ揪寮忕炕璇戞垚鏍囧噯鐨凧avaScript锛岀劧鍚庝负娴忚鍣ㄧ紪璇戞墽琛屻€侭abel浼氬皢涓婅堪鍙橀噺澹版槑璧嬪€间腑鐨凧SX琛ㄨ揪寮忚浆鎹负绗﹀悎JavaScript瑙勮寖鐨刢reateElement()鍑芥暟鏉ヨ皟鐢ㄨ鍑芥暟銆倂artitle=React.createElement("h1",{className:'title'},"椤甸潰鏍囬");鍥犱负閫氳繃JSX鍒涘缓鐨凴eact鍏冪礌绫讳技浜嶩TML鏍囩鍏冪礌锛屾墍浠ラ€氳繃JSX鐢熸垚鐨凴eact鍏冪礌琛ㄨ揪寮忎篃鍙互鍖呭惈have灞炴€с€傚綋涓€涓厓绱犳湁涓€涓垨澶氫釜灞炴€ф椂锛屽畠浼氫綔涓篶reateElement()鐨勭浜屼釜鍙傛暟浼犲叆锛屽弬鏁扮殑鍊兼槸涓€涓叿鏈夎鍏冪礌鐩稿叧灞炴€х殑瀵硅薄銆?/缈昏瘧鍓峷arimage=;//缈昏瘧鍚巚arimage=React.createElement("img",{src:"logo.png",alt锛氣€滃叕鍙告爣蹇椻€潁锛?鍜孒TML鍏冪礌涓€鏍凤紝闄や簡瀛楃涓诧紝React鍏冪礌涔熷彲浠ユ湁瀛愬厓绱犮€俁eact鍏冪礌涔熷彲浠ュ垎灞傚祵濂楁潵鍒涘缓DOM鏍戙€傚湪缈昏瘧杩囩▼涓紝涓婅堪JSX宓屽DOM瀛愬厓绱犲皢浣滀负createElement()璋冪敤鐨勭涓変釜鍙婂悗缁弬鏁颁紶閫掋€?/缈昏瘧鍓峷arsidebar=(menumenucontent

);//缈昏瘧鍚巚arsidebar=React.createElement("div",{className:"sidebar"},React.createElement("h1",className:"menu"},"menu"),React.createElement("p",className:"鏂囨湰"},"鑿滃崟鍐呭"));React涓殑createElement()鍑芥暟杩斿洖鐨勫€兼槸涓€涓狫avaScript瀵硅薄锛孯eact浣跨敤璇ュ璞″湪娴忚鍣ㄧ獥鍙d腑杈撳嚭娓叉煋鐨刄I銆傚湪涓嬮潰鐨勭ず渚嬩腑锛屾垜浠彲浠ョ湅鍒颁竴涓€氳繃JSX琛ㄨ揪鐨凴eact鍏冪礌锛屽湪杞瘧涔嬪悗锛岄€氳繃createElement()鐢熸垚涓轰竴涓璞°€備箣鍚庨€氳繃React涓殑render()灏嗚瀵硅薄娓叉煋鍒伴〉闈腑銆?/缈昏瘧鍓峷arelement=椤甸潰鏍囬;//缈昏瘧鍚巚arelement=React.createElement('h1',{className:'title'},'pagetitle');//createElement杩斿洖鐨勫璞arelement={type:'h1',props:{className:'title',children:'pagetitle'}};//createElement杩斿洖瀵硅薄鐨勬覆鏌搗arroot=ReactDOM.createRoot(document.getElementById('root'));root.render(element);浣嗘槸锛屽€煎緱娉ㄦ剰鐨勬槸锛屾偍鍙互浣跨敤Babel閰嶇疆鏉ョ炕璇戝湪React涓垱寤洪櫎createElement()涔嬪鐨勫厓绱犵殑鍑芥暟銆傝繖鏍峰仛鍏佽鍦≧eact涔嬪浣跨敤绫讳技鐨凧SX琛ㄨ揪寮忋€傚瘜鏈夎〃鐜板姏鐨凧S鍜孋SSReact鍏冪礌鐨勪竴涓噸瑕佺壒鎬ф槸鑳藉鍦↗SX琛ㄨ揪寮忎腑宓屽叆鏍囧噯鐨凧avaScript琛ㄨ揪寮忋€傛偍鍙互浣跨敤澶ф嫭鍙峰祵鍏ユ爣鍑嗙殑JavaScript琛ㄨ揪寮忋€傚湪缈昏瘧杩囩▼涓紝鑺辨嫭鍙蜂腑鐨勮剼鏈皢琚В閲婁负鏍囧噯JavaScript銆俁eact鍏冪礌涓殑宓屽琛ㄨ揪寮忓彲浠ヤ綔涓哄睘鎬у€煎拰瀛愬厓绱犮€傝繖鏄竴涓ず渚嬶細鍑芥暟鏂囩珷锛坈lassName锛宼itle锛宑ontent锛宭inebreak=true锛墈return锛?divclassName={className}>

{title}

{linebreak&&
}

{content}

);}function鏂囩珷(className,title,content,subtitle=true){returnReact.createElement("div",{className:className},React.createElement("h1",null,title),subtitle&&React.createElement("br",null),React.createElement("p",null,content));}鍦ㄨ繖涓緥瀛愪腑锛宎rticle()鍑芥暟杩斿洖涓€涓狫SX鍏冪礌锛屽畠鏈夊洓涓弬鏁般€侭abel浼氬皢绀轰緥浠g爜缈昏瘧鎴愪互涓嬪唴瀹广€傝繖娈典唬鐮佹槗浜庨槄璇诲拰鐞嗚В锛氳浆璇戞椂锛屽ぇ鎷彿娑堝け锛岀敓鎴愮殑浠g爜灏嗕粠article()鍑芥暟浼犲叆鐨勫弬鏁颁紶閫掔粰React.createElement()銆傝娉ㄦ剰鎴戜滑鍦ㄨ繖閲屼娇鐢ㄤ簡鎹㈣绗﹀弬鏁板拰&&杩愮畻绗︺€傚湪瀹為檯璋冪敤涓紝濡傛灉鍙紶閫掍笁涓弬鏁扮粰article()锛岄粯璁や负true锛岃€屽灞俢reateElement()璋冪敤鐨勭鍥涗釜鍙傛暟灏辨槸鍏冪礌銆備絾鏄紝濡傛灉鎴戜滑灏唂alse浣滀负绗洓涓弬鏁颁紶閫掔粰article()锛屽垯澶栭儴createElement()璋冪敤鐨勭鍥涗釜鍙傛暟鐨勫€间负false锛屽苟涓斾笉浼氬垱寤鸿鍏冪礌銆備娇鐢?&杩愮畻绗︽槸JSX涓殑甯哥敤涔犳儻鐢ㄦ硶锛屽彲浠ユ牴鎹叾浠栬〃杈惧紡鐨勫€兼湁鏉′欢鍦板寘鍚垨鎺掗櫎瀛愬厓绱犮€傝繖涓範鎯敤璇笌React閰嶅悎寰楀緢濂斤紝鍥犱负React浼氬拷鐣alse鎴杗ullchildren鑰屼笉浼氫负瀹冧滑鐢熸垚浠讳綍杈撳嚭銆傚湪JSX琛ㄨ揪寮忎腑浣跨敤JavaScript琛ㄨ揪寮忔椂锛屽苟涓嶅眬闄愪簬鍓嶉潰渚嬪瓙涓殑string銆丅oolean绛夊熀鏈被鍨嬪€硷紝杩樺彲浠ユ槸瀵硅薄绫诲瀷鐨凧avaScript鍊笺€備簨瀹炰笂锛屼娇鐢ㄥ璞°€佹暟缁勫拰鍑芥暟鍊煎湪React涓緢甯歌銆備緥濡傦紝鍦ㄤ笅闈㈢殑鍑芥暟涓紝JavaScript鍜孋SS鐨勮〃杈炬柟寮忓涓嬶細((item,index)=>{callback(index)}key={index}>{item}})});}鍦ㄨ繖閲岋紝鍑芥暟浣跨敤瀵硅薄瀛楅潰閲忎綔涓?ul>鍏冪礌涓奀SS鏍峰紡锛坰tyle锛夊睘鎬х殑鍊笺€傝娉ㄦ剰锛岃繖閲屼娇鐢ㄤ簡鍙屾嫭鍙枫€?ul>鍏冪礌鏈変竴涓瓙鍏冪礌锛屼絾璇ュ瓙鍏冪礌鐨勫€兼槸涓€涓暟缁勩€傝緭鍑烘暟缁勬槸閫氳繃鍦ㄨ緭鍏ユ暟缁勪笂浣跨敤map()鏄犲皠鏂规硶鏉ュ垱寤?li>瀛愬厓绱犵殑銆傚湪杩欓噷锛屾瘡涓祵濂楃殑
  • 瀛愬厓绱犻兘鏈変竴涓猳nClick浜嬩欢澶勭悊绋嬪簭灞炴€э紝鍏跺€兼槸涓€涓澶村嚱鏁般€傚鏋滄垜浠皢涓婇潰鐨凧SX浠g爜缂栬瘧鎴愭爣鍑嗙殑JavaScript浠g爜锛屽畠灏嗘槸浠ヤ笅褰㈠紡锛歠unctionlist(items,callback){returnReact.createElement("ul",{style:{padding:5,border:"dottedgreen3px"}},items.map((item,index)=>React.createElement("li",{onClick:()=>callback(index),key:index},item)));}React鍏冪礌绫诲瀷鍙﹀锛孞SX杩樻湁涓€涓瘮杈冮噸瑕佺殑鐗规€э紝灏辨槸瀹氫箟浜哛eact鍏冪礌鐨勭被鍨嬨€傛墍鏈塉SX鍏冪礌閮戒互鏍囪瘑绗﹀紑澶达紝绱ц窡鍦ㄥ乏灏栨嫭鍙蜂箣鍚庛€傚鏋滄爣璇嗙鐨勭涓€涓瓧姣嶆槸灏忓啓锛屽垯鏍囪瘑绗︿綔涓哄瓧绗︿覆浼犻€掔粰createElement()銆備絾鏄紝濡傛灉鏍囪瘑绗︾殑棣栧瓧姣嶅ぇ鍐欙紝瀹冨皢琚涓哄疄闄呮爣璇嗙锛屽苟涓旇鏍囪瘑绗︾殑JavaScript鍊煎皢浣滀负绗竴涓弬鏁颁紶閫掔粰createElement()銆傝繖鎰忓懗鐫€JSX琛ㄨ揪寮?CustomButton/>琚紪璇戜负JavaScript浠g爜锛屽皢鍏ㄥ眬CustomButton瀵硅薄浼犻€掔粰React.createElement()銆傚浜嶳eact锛岃繖绉嶅皢闈炲瓧绗︿覆鍊间綔涓虹涓€涓弬鏁颁紶閫掔粰createElement()鐨勮兘鍔涘彲鐢ㄤ簬鍒涘缓缁勪欢銆傚湪React涓畾涔夋柊缁勪欢鐨勬渶绠€鍗曟柟娉曟槸缂栧啓涓€涓嚱鏁帮紝璇ュ嚱鏁板皢props瀵硅薄浣滀负鍙傛暟骞惰繑鍥濲SX琛ㄨ揪寮忋€俻rops瀵硅薄鍙槸涓€涓〃绀哄睘鎬у€肩殑JavaScript瀵硅薄锛屽氨鍍忎綔涓虹浜屼釜鍙傛暟浼犻€掔粰createElement()鐨勫璞′竴鏍枫€備緥濡傦紝杩欐槸鍙︿竴绉嶇紪鍐檃rticle()鍑芥暟鐨勬柟娉曪細functionArticle(props){return(

    {props.title}

    {props.linebreak&&
    }

    {props.content}

    );}function鏂囩珷(className,title,content,linebreak=true){return(

    {title}

    {linebreak&&
    }

    {content}

  • );}杩欎釜鏂扮殑Article()鍑芥暟寰堝儚涔嬪墠鐨刟rticle()鍑芥暟銆備絾鏄畠鐨勫悕瀛椾互澶у啓瀛楁瘝寮€澶达紝骞朵笖鍙湁涓€涓璞′綔涓哄弬鏁般€傝繖浣垮畠鎴愪负涓€涓猂eact缁勪欢锛岃繖鎰忓懗鐫€瀹冨彲浠ョ敤鏉ヤ唬鏇縅SX琛ㄨ揪寮忎腑鐨勬爣鍑咹TML鏍囩锛氳浆璇戝涓嬶細vararticle=React.createElement(Article,{title:"鏂囩珷鏍囬",content:"鏂囩珷鍐呭"});杩欐槸涓€涓畝鍗曠殑JSX琛ㄨ揪寮忥紝浣嗘槸褰揜eact娓叉煋瀹冩椂锛屽畠浼氬皢绗簩涓弬鏁帮紝鍗硃rops瀵硅薄浼犻€掔粰绗竴涓弬鏁帮紝鍗矨rticle()鍑芥暟锛屽苟灏?Article>琛ㄨ揪寮忔浛鎹负JSX璇ュ嚱鏁拌繑鍥炵殑鍑芥暟銆傚彟澶栵紝濡傛灉鎴戜滑鐨勬煇涓ā鍧椾腑鏈夊涓粍浠讹紝鎴戜滑涔熷彲浠ョ敤鐐瑰彿鏉ヨ〃绀烘ā鍧椾腑鐨勭粍浠躲€俰mportReactfrom'react';varMyComponents={Calendar:functionCalendar(props){return
    涓€涓甫鏈墈props.color}棰滆壊鐨勬棩鍘嗐€?/div>;}}functionGreenCalendar(){return;}JSX涓璞¤〃杈惧紡鐨勫彟涓€涓敤閫旀槸浣跨敤瀵硅薄鎵╁睍杩愮畻绗︿竴娆℃寚瀹氬涓睘鎬с€傚鏋滄偍缂栧啓涓€缁勫叿鏈夊彲鑳借閲嶇敤鐨勫叕鍏卞睘鎬х殑JSX琛ㄨ揪寮忥紝鎮ㄥ彲浠ラ€氳繃灏嗗睘鎬ф娊璞″畾涔変负灞炴€у璞″苟灏嗗叾鈥滄墿灞曗€濆埌JSX鍏冪礌涓潵绠€鍖栬〃杈惧紡銆倂argreeting=;varprops={firstName:'three',lastName:'Zhang'};vargreeting=;Babel灏嗕娇鐢╛extends()灏嗗叾缂栬瘧鎴愪竴涓嚱鏁帮紝璇ュ嚱鏁板皢className灞炴€т笌props瀵硅薄涓寘鍚殑灞炴€х浉缁撳悎銆倂argreeting=React.createElement("div",_extends({className:"greeting"},props);浠婂ぉ锛屾垜浠湅鍒颁簡濡備綍閫氳繃JavaScript鎵╁睍JSX鍦↗avaScript涓〃杈綝OM鍏冪礌銆傝繖鏍峰仛鏈夊嚑涓ソ澶勶細瀹冨彲浠ユ洿濂藉湴璧嬭兘UI鍜屼簨浠堕┍鍔ㄥ紑鍙戯紝閫氳繃鎴戜滑涓婁竴鑺傛彁鍒扮殑Babel缂栬瘧鍣紝灏嗙浉鍏宠〃杈惧紡缈昏瘧鎴恈reateElement()鍑芥暟琛ㄨ揪寮忥紝鐒跺悗璋冪敤createElement()鍑芥暟鍒涘缓骞惰繑鍥炰竴涓寘鍚浉鍏冲厓绱犲畾涔夌殑瀵硅薄灞炴€э紝鏈€鍚庨€氳繃render().js鍜宑ss琛ㄨ揪寮忓皢鍏冪礌瀵硅薄娓叉煋鍒版祻瑙堝櫒涓€備篃鍙互鐢ㄦ暟缁勩€佸嚱鏁扮瓑瀵硅薄鐨勬暟鎹被鍨嬫潵琛ㄧず銆侸SX鐨勪娇鐢ㄤ篃淇冭繘浜嗘ā鍧楀寲鍜岀粍浠跺寲寮€鍙戙€傛渶鍚庯紝浠庡畨鍏ㄧ殑瑙掑害鏉ヨ锛孞SX鐨勪紭鍔垮湪浜庡湪娓叉煋涔嬪墠灏嗘墍鏈夊唴瀹归兘杞崲涓哄瓧绗︿覆锛岃繖涔熷彲浠ユ湁鏁堥槻姝㈡垜浠湪瀹夊叏璁插骇涓彁鍒扮殑璺ㄧ珯鑴氭湰鏀诲嚮锛圶SS锛夈€傝鎴戜滑鐨勫簲鐢ㄧ▼搴忔洿瀹夊叏銆傛湰鏂囦负2鏈圖ay18鐨勫涔犵瑪璁帮紝鍐呭鏉ヨ嚜鏋佸鏃堕棿銆奐vascript杩涢樁瀹炴垬璇俱€嬶紝涓€璧疯繘姝ヰ煉煉?/p>