Avastage parimad praktikad TypeScripti ja Reacti kasutamiseks, et luua robustseid, skaleeritavaid ja hooldatavaid veebirakendusi. Õppige projekti struktuuri, komponentide disaini, testimise ja optimeerimise kohta.
TypeScript koos Reactiga: parimad praktikad skaleeritavate ja hooldatavate rakenduste loomiseks
TypeScript ja React on võimas kombinatsioon kaasaegsete veebirakenduste ehitamiseks. TypeScript toob JavaScripti staatilise tüüpimise, parandades koodi kvaliteeti ja hooldatavust, samal ajal kui React pakub deklaratiivset ja komponendipõhist lähenemist kasutajaliideste ehitamiseks. See blogipostitus uurib parimaid praktikaid TypeScripti kasutamiseks koos Reactiga, et luua robustseid, skaleeritavaid ja hooldatavaid rakendusi, mis sobivad globaalsele publikule.
Miks kasutada TypeScripti koos Reactiga?
Enne parimatesse praktikatesse sukeldumist mõistame, miks TypeScript on väärtuslik lisand Reacti arendusele:
- Parem koodikvaliteet: TypeScripti staatiline tüüpimine aitab vigu tabada juba arendusprotsessi alguses, vähendades käitusaegseid probleeme ja parandades koodi usaldusväärsust.
- Täiustatud hooldatavus: Tüübiannotatsioonid ja liidesed muudavad koodi lihtsamini mõistetavaks ja refaktoreeritavaks, mis viib parema pikaajalise hooldatavuseni.
- Parem IDE tugi: TypeScript pakub suurepärast IDE tuge, sealhulgas automaatset täiendamist, koodinavigeerimist ja refaktoreerimisvahendeid, suurendades arendaja tootlikkust.
- Vähem vigu: Staatiline tüüpimine püüab kinni paljud tavalised JavaScripti vead enne käitusaega, mis viib stabiilsema ja vigadeta rakenduseni.
- Parem koostöö: Selged tüübimääratlused muudavad meeskondade koostöö suurtes projektides lihtsamaks, kuna arendajad saavad kiiresti aru erinevate komponentide ja funktsioonide eesmärgist ja kasutusest.
TypeScript Reacti projekti seadistamine
Kasutades Create React Appi
Lihtsaim viis uue TypeScript Reacti projekti alustamiseks on kasutada Create React Appi koos TypeScripti malliga:
npx create-react-app my-typescript-react-app --template typescript
See käsk seadistab põhilise Reacti projekti koos konfigureeritud TypeScriptiga, sealhulgas vajalikud sõltuvused ja tsconfig.json
faili.
tsconfig.json
faili konfigureerimine
tsconfig.json
fail on teie TypeScripti konfiguratsiooni süda. Siin on mõned soovitatavad seaded:
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": [
"src"
]
}
Olulised valikud, mida kaaluda:
"strict": true
: Lubab range tüübikontrolli, mis on vigade püüdmiseks tungivalt soovitatav."esModuleInterop": true
: Võimaldab koostalitlusvõimet CommonJS ja ES moodulite vahel."jsx": "react-jsx"
: Lubab uue JSX teisenduse, mis lihtsustab Reacti koodi ja parandab jõudlust.
Parimad praktikad Reacti komponentidele TypeScriptiga
Komponendi propside tüüpimine
Üks olulisemaid aspekte TypeScripti kasutamisel koos Reactiga on komponendi propside korrektne tüüpimine. Kasutage liideseid või tüübiliaseid, et defineerida props-objekti kuju.
interface MyComponentProps {
name: string;
age?: number; // Valikuline prop
onClick: () => void;
}
const MyComponent: React.FC = ({ name, age, onClick }) => {
return (
Hello, {name}!
{age && You are {age} years old.
}
);
};
Kasutades React.FC<MyComponentProps>
tagatakse, et komponent on funktsionaalne komponent ja et propsid on korrektselt tüübitud.
Komponendi oleku (state) tüüpimine
Kui kasutate klassikomponente, peate tüüpima ka komponendi oleku. Defineerige liides või tüübilias olekuobjekti jaoks ja kasutage seda komponendi definitsioonis.
interface MyComponentState {
count: number;
}
class MyComponent extends React.Component<{}, MyComponentState> {
state: MyComponentState = {
count: 0
};
handleClick = () => {
this.setState({
count: this.state.count + 1
});
};
render() {
return (
Count: {this.state.count}
);
}
}
Funktsionaalsete komponentide puhul, mis kasutavad useState
konksu, suudab TypeScript sageli olekumuutuja tüübi tuletada, kuid saate selle ka selgesõnaliselt määrata:
import React, { useState } from 'react';
const MyComponent: React.FC = () => {
const [count, setCount] = useState(0);
return (
Count: {count}
);
};
Tüübivalvurite (Type Guards) kasutamine
Tüübivalvurid on funktsioonid, mis kitsendavad muutuja tüüpi teatud skoobis. Need on kasulikud liittüüpidega tegelemisel või kui peate enne operatsiooni sooritamist tagama, et muutujal on kindel tüüp.
interface Circle {
kind: "circle";
radius: number;
}
interface Square {
kind: "square";
side: number;
}
type Shape = Circle | Square;
function isCircle(shape: Shape): shape is Circle {
return shape.kind === "circle";
}
function getArea(shape: Shape): number {
if (isCircle(shape)) {
return Math.PI * shape.radius ** 2;
} else {
return shape.side ** 2;
}
}
Funktsioon isCircle
on tüübivalvur, mis kontrollib, kas Shape
on Circle
. if
-ploki sees teab TypeScript, et shape
on Circle
ja lubab teil pääseda ligi selle radius
omadusele.
Sündmuste käsitlemine
Reactis sündmuste käsitlemisel TypeScriptiga on oluline sündmuseobjekt korrektselt tüüpida. Kasutage sobivat sündmuse tüüpi React
nimeruumist.
const MyComponent: React.FC = () => {
const handleChange = (event: React.ChangeEvent) => {
console.log(event.target.value);
};
return (
);
};
Selles näites kasutatakse React.ChangeEvent<HTMLInputElement>
, et tüüpida sündmuseobjekt sisendvälja muutmise sündmuse jaoks. See annab juurdepääsu target
omadusele, mis on HTMLInputElement
.
Projekti struktuur
Hästi struktureeritud projekt on hooldatavuse ja skaleeritavuse seisukohalt ülioluline. Siin on soovitatav projekti struktuur TypeScript Reacti rakenduse jaoks:
src/
├── components/
│ ├── MyComponent/
│ │ ├── MyComponent.tsx
│ │ ├── MyComponent.module.css
│ │ └── index.ts
├── pages/
│ ├── HomePage.tsx
│ └── AboutPage.tsx
├── services/
│ ├── api.ts
│ └── auth.ts
├── types/
│ ├── index.ts
│ └── models.ts
├── utils/
│ ├── helpers.ts
│ └── constants.ts
├── App.tsx
├── index.tsx
├── react-app-env.d.ts
└── tsconfig.json
Põhipunktid:
- Komponendid (Components): Grupeerige seotud komponendid kaustadesse. Iga kaust peaks sisaldama komponendi TypeScripti faili, CSS-mooduleid (kui kasutatakse) ja
index.ts
faili komponendi eksportimiseks. - Lehed (Pages): Hoidke siin tipptaseme komponente, mis esindavad teie rakenduse erinevaid lehti.
- Teenused (Services): Rakendage API-kutsed ja muud teenused selles kaustas.
- Tüübid (Types): Määratlege globaalsed tüübimääratlused ja liidesed selles kaustas.
- Abifunktsioonid (Utils): Hoidke siin abifunktsioone ja konstante.
- index.ts: Kasutage
index.ts
faile, et re-eksportida mooduleid kaustast, pakkudes puhast ja organiseeritud API-d moodulite importimiseks.
Konksude (Hooks) kasutamine TypeScriptiga
Reacti konksud võimaldavad teil kasutada olekut ja muid Reacti funktsioone funktsionaalsetes komponentides. TypeScript töötab konksudega sujuvalt, pakkudes tüübiohutust ja paremat arendajakogemust.
useState
Nagu varem näidatud, saate olekumuutujat useState
kasutamisel selgesõnaliselt tüüpida:
import React, { useState } from 'react';
const MyComponent: React.FC = () => {
const [count, setCount] = useState(0);
return (
Count: {count}
);
};
useEffect
useEffect
'i kasutamisel olge tähelepanelik sõltuvuste massiivi osas. TypeScript aitab teil vigu leida, kui unustate lisada sõltuvuse, mida efekti sees kasutatakse.
import React, { useState, useEffect } from 'react';
const MyComponent: React.FC = () => {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `Count: ${count}`;
}, [count]); // Lisa 'count' sõltuvuste massiivi
return (
Count: {count}
);
};
Kui jätate count
sõltuvuste massiivist välja, käivitub efekt ainult korra, kui komponent paigaldatakse, ja dokumendi pealkiri ei uuene, kui loendur muutub. TypeScript hoiatab teid selle võimaliku probleemi eest.
useContext
useContext
'i kasutamisel peate määrama konteksti väärtuse tüübi.
import React, { createContext, useContext } from 'react';
interface ThemeContextType {
theme: string;
toggleTheme: () => void;
}
const ThemeContext = createContext(undefined);
const ThemeProvider: React.FC = ({ children }) => {
// Rakenda teema loogika siin
return (
{} }}>
{children}
);
};
const MyComponent: React.FC = () => {
const { theme, toggleTheme } = useContext(ThemeContext) as ThemeContextType;
return (
Theme: {theme}
);
};
export { ThemeProvider, MyComponent };
Määrates konteksti väärtusele tüübi, tagate, et useContext
konks tagastab korrektse tüübiga väärtuse.
TypeScript Reacti komponentide testimine
Testimine on robustsete rakenduste ehitamise oluline osa. TypeScript täiustab testimist, pakkudes tüübiohutust ja paremat koodi katvust.
Ühiktestimine
Kasutage oma komponentide ühiktestimiseks testimisraamistikke nagu Jest ja React Testing Library.
// MyComponent.test.tsx
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import MyComponent from './MyComponent';
describe('MyComponent', () => {
it('renders the component with the correct name', () => {
render( );
expect(screen.getByText('Hello, John!')).toBeInTheDocument();
});
it('calls the onClick handler when the button is clicked', () => {
const onClick = jest.fn();
render( );
fireEvent.click(screen.getByRole('button'));
expect(onClick).toHaveBeenCalledTimes(1);
});
});
TypeScripti tüübikontroll aitab teie testides vigu leida, näiteks valede propside edastamine või valede sündmuste käsitlejate kasutamine.
Integratsioonitestimine
Integratsioonitestid kontrollivad, kas teie rakenduse erinevad osad töötavad korrektselt koos. Kasutage otsast-lõpuni testimiseks tööriistu nagu Cypress või Playwright.
Jõudluse optimeerimine
TypeScript võib aidata ka jõudluse optimeerimisel, püüdes kinni potentsiaalseid jõudluse kitsaskohti juba arendusprotsessi alguses.
Memoiseerimine
Kasutage React.memo
funktsionaalsete komponentide memoiseerimiseks ja tarbetute uuesti renderdamiste vältimiseks.
import React from 'react';
interface MyComponentProps {
name: string;
}
const MyComponent: React.FC = ({ name }) => {
console.log('Renderdan MyComponenti');
return (
Hello, {name}!
);
};
export default React.memo(MyComponent);
React.memo
renderdab komponendi uuesti ainult siis, kui selle propsid on muutunud. See võib oluliselt parandada jõudlust, eriti keerukate komponentide puhul.
Koodi tükeldamine (Code Splitting)
Kasutage dünaamilisi importimisi, et jagada oma kood väiksemateks tükkideks ja laadida neid vastavalt vajadusele. See võib vähendada teie rakenduse esialgset laadimisaega.
import React, { Suspense } from 'react';
const MyComponent = React.lazy(() => import('./MyComponent'));
const App: React.FC = () => {
return (
Laadin...
React.lazy
võimaldab teil komponente dünaamiliselt importida, mis laaditakse ainult siis, kui neid vaja läheb. Suspense
komponent pakub varu-UI-d, kuni komponent laadib.
Kokkuvõte
TypeScripti kasutamine koos Reactiga võib oluliselt parandada teie veebirakenduste kvaliteeti, hooldatavust ja skaleeritavust. Järgides neid parimaid praktikaid, saate ära kasutada TypeScripti võimsust, et ehitada robustseid ja jõudsaid rakendusi, mis vastavad globaalse publiku vajadustele. Pidades meeles selgeid tüübimääratlusi, hästi struktureeritud projekti korraldust ja põhjalikku testimist, tagate oma projektide pikaajalise edu.