reactjs - React - 相当于 Angular 模板引用变量?
问题描述
是否有任何替代或解决方法可以在 React 中实现 Angular 的模板引用变量的工作?
在 Angular 中,模板引用变量通常是对模板中 DOM 元素的引用。您可以使用井号 (#) 声明引用变量。
例如,#firstNameInput 在<input>
元素上声明了 firstNameInput 变量。
<input type="text" #firstNameInput>
<input type="text" #lastNameInput>
之后,您可以在模板内的任何位置访问该变量。例如,我将变量作为事件的参数传递。
<button (click)="show(lastNameInput)">Show</button>
show(lastName){
console.log(lastName.value);
}
解决方案
Angular 模板引用变量的直接对应物是React ref。
在 React 16.3createRef
中引入了:
class Some extends React.Component {
fooRef = React.createRef();
barRef = React.createRef();
componentDidMount() {
console.log(this.fooRef.current instanceof Node); // true
console.log(this.barRef.current instanceof Bar); // true
}
render() {
return (
<input type="text" ref={this.fooRef}>
<Bar ref={this.barRef} />
);
}
}
它的作用类似于 Angular 引用ViewChild
,并且 ref 是一个具有current
属性的对象,它是有状态组件的组件实例和非组件的 DOM 元素。
这个 Angular 查询
@ViewChild('barRef', { read: ElementRef })
类似于 React
ReactDOM.findDOMNode(this.barRef)
对于可以以不同方式通信的组件,通常应避免使用。
在较旧的 React 版本中,获取 ref 涉及使用函数手动分配它:
<Hi ref={ref => this.hiRef = ref}
ref
有状态组件的组件实例和非组件的 DOM 元素在哪里。
在 React 中,refs 的使用相对较少,通过 props 传递回调函数通常是组件之间更可取的通信方式(在 Angular 术语中将回调作为 component 传递@Input
)。
推荐阅读
- php - 如何在多维数组中获取以字符串开头的数组键?
- django - 如何在 django admin 中显示 manytomanyfields
- php - 是否可以使用(使用 PHP)先前在 mysql CLI 中声明的准备好的语句?
- python - 如何在 Python 中根据日期处理文件?
- python - 如何设置列列表的元素数等于另一列列表中的元素数
- javascript - 当 nuxt.js (vue.js) 中的路由更改时,Facebook 分享按钮消失
- pyspark - 通过红移光谱描述 parquet Struct Column
- c# - PuppeteerSharp 最佳实践
- python - 计算图像保持比率恒定的新宽度和高度并且应该具有所需的像素数
- angular-material - 日历内的角垫日期选择器格式