Zoeken…


ReactJS-component geschreven in Typescript

Eigenlijk kun je de componenten van ReactJS in Typescript gebruiken zoals in het voorbeeld van Facebook. Vervang gewoon de extensie van het 'jsx'-bestand naar' tsx ':

//helloMessage.tsx:
var HelloMessage = React.createClass({
  render: function() {
    return <div>Hello {this.props.name}</div>;
  }
});
ReactDOM.render(<HelloMessage name="John" />, mountNode);

Maar om volledig gebruik te kunnen maken van de hoofdfunctie van Typescript (statische typecontrole) moet een aantal dingen worden gedaan:

1) converteer React.createClass-voorbeeld naar ES6-klasse:

//helloMessage.tsx:
class HelloMessage extends React.Component {
  render() {
    return <div>Hello {this.props.name}</div>;
  }
}
ReactDOM.render(<HelloMessage name="John" />, mountNode);

2) voeg vervolgens Props en State interfaces toe:

interface IHelloMessageProps {
    name:string;
}

interface IHelloMessageState {
  //empty in our case
}

class HelloMessage extends React.Component<IHelloMessageProps, IHelloMessageState> {
  constructor(){
    super();
  }  
  render() {
    return <div>Hello {this.props.name}</div>;
  }
}
ReactDOM.render(<HelloMessage name="Sebastian" />, mountNode);

Nu geeft Typescript een foutmelding als de programmeur vergeet om rekwisieten door te geven. Of als ze rekwisieten hebben toegevoegd die niet in de interface zijn gedefinieerd.

Stateless React Components in Typescript

Reageren componenten die pure functies van hun rekwisieten zijn en geen interne status vereisen, kunnen worden geschreven als JavaScript-functies in plaats van de syntaxis van de standaardklasse te gebruiken, zoals:

import React from 'react'

const HelloWorld = (props) => (
    <h1>Hello, {props.name}!</h1>
);

Hetzelfde kan worden bereikt in Typescript met de klasse React.SFC :

import * as React from 'react';

class GreeterProps {
   name: string
}

const Greeter : React.SFC<GreeterProps> = props =>
    <h1>Hello, {props.name}!</h1>;

Merk op dat de naam React.SFC een alias is voor React.StatelessComponent dus worden gebruikt.

Installatie en instellingen

Om typescript te gebruiken met reageren in een knooppuntproject, moet u eerst een projectmap hebben die is geïnitialiseerd met npm. De map initialiseren met npm init

Installeren via npm of garen

U kunt React installeren met behulp van npm door het volgende te doen:

npm install --save react react-dom

Facebook heeft zijn eigen pakketbeheerder genaamd Yarn uitgebracht , die ook kan worden gebruikt om React te installeren. Na het installeren van Yarn hoeft u alleen deze opdracht uit te voeren:

yarn add react react-dom

Je kunt React vervolgens in je project gebruiken op precies dezelfde manier alsof je React via npm had geïnstalleerd.

Definities van reacttypen installeren in Typescript 2.0+

Om uw code met behulp van typescript te compileren, voegt u typedefinitiebestanden met npm of garen toe.

npm install --save-dev @types/react @types/react-dom

of met garen

yarn add --dev @types/react @types/react-dom

Definities van reacttypen installeren in oudere versies van Typescript

U moet een afzonderlijk pakket met de naam tsd gebruiken

tsd install react react-dom --save

Typeconfiguratie toevoegen of wijzigen

Als u JSX wilt gebruiken, een taal die javascript combineert met html / xml, moet u de configuratie van de typescript-compiler wijzigen. In het tsconfig.json het project (meestal tsconfig.json genoemd) moet u de JSX-optie toevoegen als:

"compilerOptions": {
    "jsx": "react"
},

Die compileroptie vertelt de typcript-compiler in feite om de JSX-tags in code te vertalen naar javascript-functieaanroepen.

Om te voorkomen dat de typescript-compiler JSX omzet in gewone javascript-functie-aanroepen, gebruikt u

"compilerOptions": {
    "jsx": "preserve"
},

Staatloze en eigenschaploze componenten

De eenvoudigste reactiecomponent zonder status en zonder eigenschappen kan worden geschreven als:

import * as React from 'react';

const Greeter = () => <span>Hello, World!</span>

Die component heeft echter geen toegang tot this.props omdat typescript niet kan zien of het een react-component is. Gebruik voor toegang tot de rekwisieten:

import * as React from 'react';

const Greeter: React.SFC<{}> = props => () => <span>Hello, World!</span>

Zelfs als de component geen expliciet gedefinieerde eigenschappen heeft, heeft deze nu toegang tot props.children omdat alle componenten inherent kinderen hebben.

Een ander soortgelijk goed gebruik van componenten zonder staat en zonder eigendom is in eenvoudige paginasjablonen. Het volgende is een voorbeeldige eenvoudige Page component, ervan uitgaande dat er al hypothetische componenten voor Container , NavTop en NavBottom zijn in het project:

import * as React from 'react';

const Page: React.SFC<{}> = props => () => 
    <Container>
        <NavTop />
        {props.children}
        <NavBottom />
    </Container>

const LoginPage: React.SFC<{}> = props => () =>
    <Page>
        Login Pass: <input type="password" />
    </Page>

In dit voorbeeld kan het onderdeel Page later door elke andere werkelijke pagina worden gebruikt als basissjabloon.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow