TSX
TSX és una extensió sintàctica per Typescript que et permet escriure codi que s'assembla a HTML dins d'un fitxer Typescript
Introducció
TSX s’assembla molt a l’HTML, però és més estricte i pot mostrar informació dinàmica.
Et permet tenir en el mateix lloc el contingut i la lògica de renderització.
Entorn de treball
Instal·la Deno.
Crea un projecte amb el nom tsx, especificant directament el nom del projecte i la plantilla que vols utilitzar:
Instal·la les dependències:
Instal·la tailwindcss i @tailwindcss/vite
Afegeix el complement @tailwindcss/vite a la teva configuració de Vite.
// https://vite.dev/config/
plugins:,
})Borra el contingut del fitxer src/index.css, i posa aquest:
@import "tailwindcss";Arrenca el servidor de desenvolupament:
Obre el navegador: http://localhost:5173
Veuras la pàgina d’inici per defecte:

Elimina el fitxer src/App.css.
Modifica el fitxer src/App.tsx:
return
}El prefix export default és part de la sintaxis estàndard de Typescript (no és específic de React).
Et permet marcar la funció principal d’un arxiu perquè després la puguis importar en altres arxius.
Regles
A continuació veurem les regles TSX.
Només pots retornar un únic element arrel
return
h1Alí Bey</h1>
pAquesta és la història</p>
)
}Si has de retornar més d’un element, els has d’afegir tots dins d’un element arrel.
Per exemple, pots utilitzar un <div>:
return
div
h1Alí Bey</h1>
pAquesta és la història ...</p>
</div>
)
}Una altra opció és utilitzar l’element buit <>:
return
<>
h1Alí Bey</h1>
pAquesta és la història ...</p>
</>
)
}Aquest element és invisible i no genera cap element de marcatge.
return
<>
h1Alí Bey</h1>
pAquesta és la història ...</p>
</>
)
}Tanca tots els tags
Totes les “etiquetes” TSX s’ahn de tancar de manera explícita.
En aquest exemple tens una etiquet <img> que no està tancada:
return
<img src="https://upload.wikimedia.org/wikipedia/commons/4/48/Rough_Collie_600.jpg">
)
}L’has de tancar de manera explícita:
return
<img src="https://upload.wikimedia.org/wikipedia/commons/4/48/Rough_Collie_600.jpg"/>
)
}camelCase
TSX es converteix en Typescript, i els atributs dels elements TSX es converteixen en atributs d’objectes TypeScript.
Per exemple, <img src="rough-collie"/> es converteix en l’objecte:
Per tant, els noms dels atributs TSX estan limitats pels noms que poden tenir els atributs d’objecte Typescript.
Per exemple, els noms no poden tenir guions o utilitzar paraules reservades com class.
return
<div class="container">
<img src="https://upload.wikimedia.org/wikipedia/commons/4/48/Rough_Collie_600.jpg"/>
</div>
)
}Com que class és una paraula reservada, has d’utilitzar className, el nom de la propietat que correspon al DOM:
return
<div className="container">
<img src="https://upload.wikimedia.org/wikipedia/commons/4/48/Rough_Collie_600.jpg"/>
</div>
)
}Pots trobar tots aquests atributs a la llista de propietats de component del DOM.
Typescript dins de TSX
Amb la clau {} pots afegir referenciar una propietat dinàmica dins del “markup”:
return
<div className="container m-5">
pArea of is </p>
</div>
)
}També pots afegir codi Typescript directament codi:
return
<div className="container m-5">
pArea of 9 is </p>
</div>
)
}Això també inclou el cridar funcions:
return 3141592653 * radius ** 2
}
return
<div className="container m-5">
pArea of 5 is </p>
</div>
)
}Debugger
Pots utilitzar la instrucció debugger per analitzar el codi en execució.
Per exemple:
debugger
return
<div className="container m-5">
pArea of 5 is </p>
</div>
)
}- Obre la pàgina amb el navegador “Google Chrome”: http://localhost:5173
- Obre l’eina per desenvolupadors del navegador amb
Ctrl+Shift+I. - Refresca la pàgina
F5
//tsx/debugger.gif
Renderitzat condicional
Pots utilitzar la sentència if per controlar quin arbre TSX es tornarà en funció d’una condició:
if age < 18 return
<div className="container m-5">
<p className="text-warning">Encara ets massa jove per entrar al club de les tortugues</p>
</div>
)
}
return
<div className="container m-5">
pBenvigut al club 🐢🐢🐢 !</p>
</div>
)
}En aquest exemple pots veure que una part del contingut està duplicat.
Si vols pots utilitzar l’operador ? : dins una clau {} per eliminar codi duplicat:
return
<div className="container m-5 text-center">
<p className="fs-1 m-2">🐢</p>
<p className="text-warning">Encara ets massa jove per entrar al club de les tortugues</p> :
pBenvigut al club 🐢🐢🐢 !</p>
}
</div>
)
}També pots utilitzar l’operador && per generar contingut només si es dona una condició:
return
<div className="container m-5 text-center">
<p className="fs-1 m-2">🐢</p>
<p className="text-warning">Encara ets massa jove per entrar al club de les tortugues</p> :
pBenvigut al club 🐢🐢🐢 !</p>
}
</div>
)
}Si vols pots guardar codi TSX en una variable:
// TODOLlistes
Una situació habitual és que tinguis una llista, i vols mostrar tots (o alguns) elements de la llista.
Amb el mètode map() pots transformar la llista en una llista d’elements TSX.
'Creola Katherine Johnson: mathematician',
'Mario José Molina-Pasquel Henríquez: chemist',
'Mohammad Abdus Salam: physicist',
'Percy Lavon Julian: chemist',
'Subrahmanyan Chandrasekhar: astrophysicist'
]
return
<div className="container m-5">
ul
</ul>
</div>
)
}Si només vols mostrar aquelles persones que són químics, pots utilitzar el mètode filter() per filtrar la llista:
// ...
return
<div className="container m-5">
ul
</ul>
</div>
)
}Activitat
1. A continuació tens una llista de temperatures mitjes mensuals de l’aire de la ciutat de Barcelona des de l’any 2000.
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
]
return h1Temperatures Barcelona</h1>
}Has de mostrar la informació en una taula:
Show solution
"Agost", "Setembre", "Octubre", "Novembre", "Desembre"]
return
<table className="table-auto">
<caption className="caption-top">Temperatures de Barcelona</caption>
thead
tr
</tr>
</thead>
tbody
<th scope="row">
</tr>)}
</tbody>
</table>
)
}2. A continuació has de posar color a les celes.
Mostra en:
- Color blau les temperatures inferiors a 10
- En color vermell les temperatures superiors a 20
Show solution
"Agost", "Setembre", "Octubre", "Novembre", "Desembre"]
return
</tr>
</thead>
t < 10 ? :
t > 20 ? : )}
</tr>)}
</tbody>
</table>
)