React教程

React 参考

参考是React中参考的简写。它类似于React中的键。它是一个属性,可以存储对特定DOM节点或React元素的引用。它提供了一种访问React DOM节点或React元素以及如何与之交互的方法。

何时使用引用

引用可以在以下情况下使用: 当我们要更改子组件的值而不使用Props时使用。以下情况:
当我们需要DOM测量(例如管理焦点,文本选择或媒体播放)时。 它用于触发命令式动画。 与第三方DOM库集成时。 它也可以在回调中使用。

何时不使用参考

应避免将其用于声明式可以做的任何事情。例如,您无需在Dialog组件上使用 open()和 close()方法,而是需要向其传递 isOpen Props。 您应该避免过度使用Refs。

如何创建引用

在React中,可以使用 React.createRef()创建引用。可以通过 ref 属性将其分配给React元素。通常在创建组件时将其分配给实例属性,然后可以在整个组件中对其进行引用。
class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.callRef = React.createRef();
  }
  render() {
    return <div ref={this.callRef} />;
  }
}

如何访问引用

在React中,当将ref传递到render方法中的元素时,可以通过ref的当前属性访问对节点的引用
const node = this.callRef.current;

引用当前属性

参考值取决于节点的类型而不同:
在HTML元素中使用ref属性时,使用 React.createRef()创建的ref会接收底层的DOM元素作为其 current 属性。 如果在自定义类组件上使用了ref属性,则ref对象将收到该组件的 mounted 实例作为其当前属性。 ref属性不能用于功能组件,因为它们没有实例。

添加对DOM元素的引用

在下面的示例中,我们添加了一个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 (
      <div>
        <h2>Adding Ref to DOM element</h2>
        <input
          type="text"
          ref={this.callRef} />
        <input
          type="button"
          value="Add text input"
          onClick={this.addingRefInput}
        />
      </div>
    );
  }
}
export default App;
输出
React引用

添加引用类组件

在下面的示例中,我们添加了一个引用来存储对类组件的引用。

示例

import React, { Component } from 'react';
import { render } from 'react-dom';
 
function CustomInput(props) {
  let callRefInput = React.createRef();
 
  function handleClick() {
    callRefInput.current.focus();
  }
 
  return (
    <div>
      <h2>Adding Ref to class Component</h2>
      <input
        type="text"
        ref={callRefInput} />
      <input
        type="button"
        value="Focus input"
        onClick={handleClick}
      />
    </div>
  );
}
class App extends React.Component {
  constructor(props) {
    super(props);
    this.callRefInput = React.createRef();
  }
 
  focusRefInput() {
    this.callRefInput.current.focus();
  }
 
  render() {
    return (
      <CustomInput ref={this.callRefInput} />
    );
  }
}
export default App;
输出
React引用

回调裁判

在React中,还有另一种使用裁判的方式,称为" 回调裁判",当设置裁判时,它可以提供更多控制权。 取消设置。代替通过createRef()方法创建引用,React允许通过将回调函数传递给组件的ref属性来创建引用的方法。看起来像下面的代码。
<input type="text" ref={element => 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 (
      <div>
  <h2>Callback Refs Example</h2>
        <input
          type="text"
          ref={this.setInputRef}
        />
        <input
          type="button"
          value="Focus input text"
          onClick={this.focusRefInput}
        />
      </div>
    );
  }
}
export default App;
在上面的示例中,当组件装载和组件卸载时,React将调用" ref"回调来存储对输入DOM元素的引用。 ,以 null 命名。在 componentDidMount 或 componentDidUpdate 触发之前,引用始终是最新。组件之间传递的回调ref与使用React.createRef()创建的对象ref相同。
输出
React引用

将引用从一个组件转发到另一个组件

引用转发是一种技术用于将 ref 通过组件传递到其子组件之一。可以通过使用 React.forwardRef()方法来执行。此技术对于高阶组件特别有用,并且特别用于可重用的组件库中。下面是最常见的示例。

示例

import React, { Component } from 'react';
import { render } from 'react-dom';
const TextInput = React.forwardRef((props, ref) => (
  <input type="text" placeholder="Hello World" ref={ref} />
));
const inputRef = React.createRef();
class CustomTextInput extends React.Component {
  handleSubmit = e => {
    e.preventDefault();
    console.log(inputRef.current.value);
  };
  render() {
    return (
      <div>
        <form onSubmit={e => this.handleSubmit(e)}>
          <TextInput ref={inputRef} />
          <button>Submit</button>
        </form>
      </div>
    );
  }
}
export default App;
在上面的示例中,有一个组件 TextInput ,其中有一个子级作为输入字段。现在,要将 ref 传递或转发到输入,首先,创建一个参考,然后将您的参考传递到 。之后,React将引用作为第二个参数转发给 forwardRef 函数。接下来,我们将此ref参数向下转发到 。现在,可以在 inputRef.current 上访问DOM节点的值。

与useRef()React

在 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 (
    <>
      <input ref={inputRef} type="text" />
      <button onClick={onButtonClick}>Submit</button>
    </>
  );
}

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4