Tài liệu này được dịch bằng AI. Để biết thông tin chính xác, vui lòng tham khảo phiên bản tiếng Anh.
RunJS hỗ trợ cú pháp JSX, cho phép bạn viết mã tương tự như các thành phần React. JSX sẽ được biên dịch tự động trước khi thực thi.
ctx.libs.React.createElement và ctx.libs.React.Fragment.ctx.libs.React.ctx.importAsync('react@x.x.x'), JSX sẽ chuyển sang sử dụng phương thức createElement từ instance cụ thể đó.RunJS tích hợp sẵn React và các thư viện UI phổ biến. Bạn có thể truy cập chúng trực tiếp thông qua ctx.libs mà không cần sử dụng import:
createRoot nếu cần)Khi viết JSX trực tiếp, bạn không cần giải cấu trúc (destructure) React. Bạn chỉ cần giải cấu trúc từ ctx.libs khi sử dụng Hooks (như useState, useEffect) hoặc Fragment (<>...</>):
Lưu ý: React tích hợp sẵn và React bên ngoài được nhập qua ctx.importAsync() không thể dùng lẫn lộn. Nếu bạn sử dụng một thư viện UI bên ngoài, React cũng phải được nhập từ cùng một nguồn bên ngoài đó.
Khi tải một phiên bản React và thư viện UI cụ thể thông qua ctx.importAsync(), JSX sẽ sử dụng instance React đó:
Nếu antd phụ thuộc vào react/react-dom, bạn có thể chỉ định cùng một phiên bản thông qua deps để tránh việc tạo nhiều instance:
Lưu ý: Khi sử dụng React bên ngoài, các thư viện UI như antd cũng phải được nhập thông qua ctx.importAsync(). Không dùng lẫn lộn chúng với ctx.libs.antd.
<Button type="primary">Văn bản</Button><>...</> hoặc <React.Fragment>...</React.Fragment> (yêu cầu giải cấu trúc const { React } = ctx.libs khi sử dụng Fragment){biểu thức} trong JSX để chèn các biến hoặc phép toán, ví dụ {ctx.user.name} hoặc {count + 1}. Không sử dụng cú pháp template {{ }}.{flag && <span>Nội dung</span>} hoặc {flag ? <A /> : <B />}array.map() để trả về một danh sách các phần tử và đảm bảo mỗi phần tử có một key ổn định.