เอกสารนี้แปลโดย AI สำหรับข้อมูลที่ถูกต้อง กรุณาดูเวอร์ชันภาษาอังกฤษ
RunJS รองรับไวยากรณ์ JSX ทำให้คุณสามารถเขียนโค้ดได้เหมือนกับการเขียนคอมโพเนนต์ React โดย JSX จะถูกคอมไพล์โดยอัตโนมัติก่อนการทำงานครับ
ctx.libs.React.createElement และ ctx.libs.React.Fragmentctx.libs.React โดยอัตโนมัติครับctx.importAsync('react@x.x.x') ตัว JSX จะเปลี่ยนไปใช้เมธอด createElement จากอินสแตนซ์นั้นแทนRunJS มาพร้อมกับ React และไลบรารี UI พื้นฐานในตัว ซึ่งสามารถเรียกใช้งานได้โดยตรงผ่าน ctx.libs โดยไม่ต้องใช้ import ครับ:
createRoot ได้หากจำเป็น)เมื่อเขียน JSX โดยตรง ไม่จำเป็นต้องทำการ destructure React แต่จำเป็นต้อง destructure จาก ctx.libs เมื่อมีการใช้ Hooks (เช่น useState, useEffect) หรือ Fragment (<>...</>) ครับ:
ข้อควรระวัง: React ในตัวและ React ภายนอกที่นำเข้าผ่าน ctx.importAsync() ไม่สามารถใช้ร่วมกันได้ หากคุณใช้ไลบรารี UI ภายนอก จะต้องนำเข้า React จากแหล่งภายนอกเดียวกันด้วยครับ
เมื่อโหลด React และไลบรารี UI เวอร์ชันที่ระบุผ่าน ctx.importAsync() ตัว JSX จะใช้อินสแตนซ์ของ React นั้นครับ:
หาก antd จำเป็นต้องใช้ react/react-dom คุณสามารถระบุเวอร์ชันเดียวกันผ่าน deps เพื่อหลีกเลี่ยงการเกิดหลายอินสแตนซ์ได้ครับ:
ข้อควรระวัง: เมื่อใช้ React ภายนอก ไลบรารี UI เช่น antd จะต้องนำเข้าผ่าน ctx.importAsync() ด้วยเช่นกัน ห้ามใช้ปะปนกับ ctx.libs.antd ครับ
<Button type="primary">ข้อความ</Button><>...</> หรือ <React.Fragment>...</React.Fragment> (เมื่อใช้ Fragment จำเป็นต้อง destructure const { React } = ctx.libs){นิพจน์} ใน JSX เพื่อใส่ตัวแปรหรือการคำนวณ เช่น {ctx.user.name}, {count + 1} ห้ามใช้ไวยากรณ์เทมเพลตแบบ {{ }}{flag && <span>เนื้อหา</span>} หรือ {flag ? <A /> : <B />}array.map() เพื่อส่งคืนรายการขององค์ประกอบ และกำหนด key ที่คงที่ให้กับแต่ละองค์ประกอบด้วยครับ