📅  最后修改于: 2020-12-19 08:37:24             🧑  作者: Mango
Refs是React中用于引用的简写。它类似于React中的键。它是一个属性,可以存储对特定DOM节点或React元素的引用。它提供了一种访问React DOM节点或React元素以及如何与之交互的方法。当我们要更改子组件的值而无需使用道具时,可以使用它。
在以下情况下可以使用引用:
在React中,可以使用React.createRef()创建引用。可以通过ref属性将其分配给React元素。通常在创建组件时将其分配给实例属性,然后可以在整个组件中对其进行引用。
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.callRef = React.createRef();
}
render() {
return ;
}
}
在React中,当将ref传递到render方法中的元素时,可以通过ref的当前属性访问对节点的引用。
const node = this.callRef.current;
ref值根据节点的类型而有所不同:
在下面的示例中,我们添加了一个ref来存储对DOM节点或元素的引用。
import React, { Component } from 'react';
import { render } from 'react-dom';
class App extends React.Component {
constructor(props) {
super(props);
this.callRef = React.createRef();
this.addingRefInput = this.addingRefInput.bind(this);
}
addingRefInput() {
this.callRef.current.focus();
}
render() {
return (
Adding Ref to DOM element
);
}
}
export default App;
输出量
在下面的示例中,我们添加了一个ref来存储对类组件的引用。
import React, { Component } from 'react';
import { render } from 'react-dom';
function CustomInput(props) {
let callRefInput = React.createRef();
function handleClick() {
callRefInput.current.focus();
}
return (
Adding Ref to Class Component
);
}
class App extends React.Component {
constructor(props) {
super(props);
this.callRefInput = React.createRef();
}
focusRefInput() {
this.callRefInput.current.focus();
}
render() {
return (
);
}
}
export default App;
输出量
在react中,还有另一种使用ref的方法,称为“回调refs ”,它在设置和取消设置ref时提供了更多控制。代替通过createRef()方法创建引用,React允许通过将回调函数传递给组件的ref属性来创建引用的方法。看起来像下面的代码。
this.callRefInput = element} />
回调函数用于在实例属性中存储对DOM节点的引用,并且可以在其他位置访问。可以通过以下方式访问:
this.callRefInput.value
下面的示例有助于了解回调引用的工作。
import React, { Component } from 'react';
import { render } from 'react-dom';
class App extends React.Component {
constructor(props) {
super(props);
this.callRefInput = null;
this.setInputRef = element => {
this.callRefInput = element;
};
this.focusRefInput = () => {
//Focus the input using the raw DOM API
if (this.callRefInput) this.callRefInput.focus();
};
}
componentDidMount() {
//autofocus of the input on mount
this.focusRefInput();
}
render() {
return (
Callback Refs Example
);
}
}
export default App;
在上面的示例中,当组件安装时,React将调用“ ref”回调以存储对输入DOM元素的引用,而当组件卸载时,以null调用它。在componentDidMount或componentDidUpdate触发之前,引用始终是最新的。组件之间传递的回调ref与使用React.createRef()创建的对象ref相同。
输出量
引用转发是一种用于将ref通过组件传递到其子组件之一的技术。可以通过使用React.forwardRef()方法来执行。此技术对于高阶组件特别有用,并且特别用于可重用组件库中。最常见的示例如下。
import React, { Component } from 'react';
import { render } from 'react-dom';
const TextInput = React.forwardRef((props, ref) => (
));
const inputRef = React.createRef();
class CustomTextInput extends React.Component {
handleSubmit = e => {
e.preventDefault();
console.log(inputRef.current.value);
};
render() {
return (
);
}
}
export default App;
在上面的示例中,有一个TextInput组件,其中有一个子级作为输入字段。现在,要将ref向下传递或转发到输入,首先,创建一个ref,然后将您的ref向下传递给
它在React 16.7及更高版本中引入。它有助于访问DOM节点或元素,然后我们可以与该DOM节点或元素进行交互,例如聚焦输入元素或访问输入元素值。它返回其.current属性初始化为传递的参数的ref对象。返回的对象在组件的生存期内一直存在。
const refContainer = useRef(initialValue);
在下面的代码中, useRef是一个函数,该函数分配给变量inputRef ,然后附加到要引用的HTML元素内称为ref的属性。
function useRefExample() {
const inputRef= useRef(null);
const onButtonClick = () => {
inputRef.current.focus();
};
return (
<>
>
);
}