Ce face jsxFactory
Cu "jsx": "react", fiecare element JSX devine un apel de funcție. Implicit este React.createElement, iar fragmentele <>...</> folosesc React.Fragment. Biblioteci ca Preact folosesc alte nume: h și Fragment. jsxFactory și jsxFragmentFactory schimbă aceste nume.
reactNamespace este varianta mai veche: schimbă doar obiectul (Preact.createElement în loc de React.createElement). Nu poate fi folosită împreună cu jsxFactory. Pentru un singur fișier, aceleași lucruri se pot cere cu comentariile /** @jsx h */ și /** @jsxFrag Fragment */.
Valori implicite: React.createElement, React.Fragment și React. Opțiunile nu au efect cu react-jsx; acolo se folosește jsxImportSource.
Parametri
| Parametru | Descriere |
|---|---|
jsxFactory |
Funcția pentru elemente. Implicit React.createElement. |
jsxFragmentFactory |
Valoarea pentru fragmente. Implicit React.Fragment. |
reactNamespace |
Obiectul pe care se apelează createElement. Implicit React. |
Exemple
Exemplul 1: Preact cu h și Fragment
Funcțiile h și Fragment sunt importate din preact, iar JSX-ul le folosește direct.
// tsconfig.json
{
"compilerOptions": {
"target": "es2022",
"module": "esnext",
"jsx": "react",
"jsxFactory": "h",
"jsxFragmentFactory": "Fragment",
"outDir": "dist"
}
}
// src/salut.tsx
import { h, Fragment } from "preact";
export const Lista = () => (
<>
<p>Ana</p>
<p>Ion</p>
</>
);
Rezultat (tsc 5.9)
$ npx tsc && cat dist/salut.js
import { h, Fragment } from "preact";
export const Lista = () => (h(Fragment, null,
h("p", null, "Ana"),
h("p", null, "Ion")));
Exemplul 2: reactNamespace
Doar obiectul se schimbă; metoda rămâne createElement.
// tsconfig.json: "jsx": "react", "reactNamespace": "Preact"
// src/salut.tsx
export const A = () => <p>Bună</p>;
Rezultat (tsc 5.9)
$ npx tsc && cat dist/salut.js
export const A = () => Preact.createElement("p", null, "Bun\u0103");
Greșeli frecvente
- Să schimbi
jsxFactoryși să uiți să imporți funcția în fiecare fișier.tsx. tsc dă eroare că nu găseșteh.
Comenzi înrudite
jsx: Spune ce face tsc cu sintaxa JSX din fișierele .tsx: o transformă în apeluri de funcții (React) sau o lasă neschimbată.jsxImportSource: Pentru jsx: „react-jsx”, alege pachetul din care se importă automat funcțiile JSX (implicit react).