我正在使用带有 React 的 Typescript。我无法理解如何使用 refs 来获得关于 refs 引用的 react 节点的静态类型和智能感知。我的代码如下。
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>
);
}}
原文由 Akshar Patel 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您使用的是 React 16.3+,则 建议 的创建 refs 的方法是使用
React.createRef()
。当组件挂载时,
ref
属性的current
属性将分配给引用的组件/DOM 元素,并在卸载时分配回null
。因此,例如,您可以使用this.stepInput.current
访问它。有关
RefObject
的更多信息,请参阅 @apieceofbart 的回答 或添加 了 PRcreateRef()
。如果您使用的是早期版本的 React (<16.3) 或需要更细粒度地控制何时设置和取消设置 refs,则可以使用 “回调 refs” 。
当组件挂载时,React 将使用 DOM 元素调用
ref
回调,并在卸载时使用null
调用它。因此,例如,您可以简单地使用this.stepInput
访问它。通过将
ref
回调定义为类上的绑定方法而不是内联函数(如在此答案的 先前版本 中),您可以避免在更新 期间调用两次 回调。曾经 有 一个 API,其中
ref
属性是一个字符串(请参阅 Akshar Patel 的回答),但由于 一些 问题,强烈建议不要使用字符串引用,最终会删除。于 2018 年 5 月 22 日编辑,在 React 16.3 中添加了新的引用方式。感谢@apieceofbart 指出有一种新方法。