私は React で Typescript を使用しています。ref によって参照される react ノードに関して静的型付けとインテリセンスを取得するために ref を使用する方法がわかりません。私のコードは次のとおりです。
import * as React from 'react';
interface AppState {
count: number;
}
interface AppProps {
steps: number;
}
interface AppRefs {
stepInput: HTMLInputElement;
}
export default class TestApp extends React.Component<AppProps, AppState> {
constructor(props: AppProps) {
super(props);
this.state = {
count: 0
};
}
incrementCounter() {
this.setState({count: this.state.count + 1});
}
render() {
return (
<div>
<h1>Hello World</h1>
<input type="text" ref="stepInput" />
<button onClick={() => this.incrementCounter()}>Increment</button>
Count : {this.state.count}
</div>
);
}}
ベストアンサー1
React 16.3以降を使用している場合は、推奨される方法refs を作成するには を使用しますReact.createRef()
。
class TestApp extends React.Component<AppProps, AppState> {
private stepInput: React.RefObject<HTMLInputElement>;
constructor(props) {
super(props);
this.stepInput = React.createRef();
}
render() {
return <input type="text" ref={this.stepInput} />;
}
}
コンポーネントがマウントされると、ref
属性のcurrent
プロパティは参照先のコンポーネント/DOM 要素に割り当てられ、null
マウント解除されると に割り当てられます。そのため、たとえば を使用してアクセスできますthis.stepInput.current
。
詳細についてはRefObject
、@apieceofbart の回答または広報 createRef()
が追加されました。
以前のバージョンのReact(<16.3)を使用している場合、またはrefsの設定と設定解除をより細かく制御する必要がある場合は、以下を使用できます。「コールバック参照」。
class TestApp extends React.Component<AppProps, AppState> {
private stepInput: HTMLInputElement;
constructor(props) {
super(props);
this.stepInput = null;
this.setStepInputRef = element => {
this.stepInput = element;
};
}
render() {
return <input type="text" ref={this.setStepInputRef} />
}
}
コンポーネントがマウントされると、React はref
DOM 要素でコールバックを呼び出し、null
アンマウントされると でコールバックを呼び出します。そのため、たとえば、 を使用するだけでアクセスできますthis.stepInput
。
ref
コールバックをインライン関数ではなくクラスのバインドされたメソッドとして定義することで(前のバージョンこの回答のコールバックを回避できます2回呼び出されるアップデート。
そこにはかつてはref
属性が文字列であるAPI (アクシャル・パテルの回答)ですが、いくつかの 問題文字列参照は強く推奨されておらず、最終的には削除される予定です。
2018 年 5 月 22 日に編集し、React 16.3 で ref を実行する新しい方法を追加しました。新しい方法があることを指摘してくれた @apieceofbart に感謝します。