サーチ…


Typescriptで書かれたReactJSコンポーネント

実際、ReactJSのコンポーネントはTypescriptでfacebookの例のように使うことができます。 'jsx'ファイルの拡張子を 'tsx'に置き換えてください:

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

しかし、Typescriptの主な機能(静的型チェック)をフルに活用するためには、

1)React.createClassの例をES6に変換するクラス:

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

2)次に、小道具と州のインターフェースを追加する:

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);

プログラマが小道具を渡すことを忘れた場合、Typescriptはエラーを表示します。または、インタフェースに定義されていない小道具を追加した場合。

Typescriptのステートレスなリアクションコンポーネント

それらの小道具の純粋な機能であり、内部状態を必要としない反応コンポーネントは、標準クラス構文を使用する代わりに、JavaScript関数として記述することができます。

import React from 'react'

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

React.SFCクラスを使ってReact.SFCで同じことができます:

import * as React from 'react';

class GreeterProps {
   name: string
}

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

なお、名前React.SFC別名ですReact.StatelessComponentのいずれかを使用することができますので、。

インストールとセットアップ

ノード・プロジェクトでreactとtypescriptを使用するには、最初にnpmで初期化されたプロジェクト・ディレクトリーを持っていなければなりません。 npm initディレクトリを初期化するには

npmまたは糸での取り付け

次のようにしてnpmを使ってReactをインストールすることができます:

npm install --save react react-dom

FacebookはYarnという独自のパッケージマネージャをリリースしました。これはReactのインストールにも使用できます。 Yarnをインストールしたら、次のコマンドを実行するだけです:

yarn add react react-dom

Reactをnpm経由でインストールした場合とまったく同じ方法で、プロジェクトでReactを使用することができます。

Typescript 2.0以降での反応型定義のインストール

typescriptを使用してコードをコンパイルするには、npmまたはyarnを使用して型定義ファイルを追加またはインストールします。

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

または、糸を使用して

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

Typescriptの古いバージョンでの反応型定義のインストール

tsdという別のパッケージを使用する必要があります

tsd install react react-dom --save

Typescript構成の追加または変更

JavaScriptとhtml / xmlを混在させたJSXを使用するには、typescriptコンパイラの設定を変更する必要があります。プロジェクトのtypescript設定ファイル(通常はtsconfig.jsonというtsconfig.json )に、JSXオプションを次のように追加する必要があります。

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

そのコンパイラオプションは、基本的にtypescriptコンパイラに、コード内のJSXタグをjavascript関数呼び出しに変換するように指示します。

typescriptコンパイラがJSXをプレーンなjavascript関数呼び出しに変換するのを避けるには、

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

ステートレスおよびプロパティレスコンポーネント

状態のない最も簡単な反応コンポーネントとプロパティは、次のように記述できます。

import * as React from 'react';

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

しかし、そのコンポーネントはthis.propsアクセスすることができません。 this.props 、typescriptはそれが反応コンポーネントかどうかを知ることができないからです。その小道具にアクセスするには、以下を使用します。

import * as React from 'react';

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

コンポーネントに明示的にプロパティを定義していない場合でも、すべてのコンポーネントには本来子があるため、 props.childrenアクセスできるようになりました。

ステートレスとプロパティレスのコンポーネントのもう1つの同様の優れた使い方は、単純なページテンプレートの使用です。次は、プロジェクト内に仮想のContainerNavTop 、およびNavBottomコンポーネントが既に存在すると仮定すると、単純なPageコンポーネントのNavBottomです。

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>

この例では、 Pageコンポーネントは後で他の実際のページで基本テンプレートとして使用できます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow