Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

React中的refs作用 #53

Open
yixiaosi1314 opened this issue Jun 28, 2021 · 1 comment
Open

React中的refs作用 #53

yixiaosi1314 opened this issue Jun 28, 2021 · 1 comment

Comments

@yixiaosi1314
Copy link

No description provided.

@guowei55555
Copy link

guowei55555 commented Jul 1, 2021

react中refs的作用:

获取dom元素。在React中Refs提供了一种方式,允许用户访问dom节点或者在render方法中创建的React元素。

refs转发

Ref 转发是一个可选特性,其允许某些组件接收 ref,并将其向下传递(换句话说,“转发”它)给子组件。

ref 的值根据节点的类型而有所不同:

1.当 ref 属性用于 HTML 元素时,构造函数中使用 React.createRef() 创建的 ref 接收底层 DOM 元素作为其 current 属性。

2.当 ref 属性用于自定义 class 组件时,ref 对象接收组件的挂载实例作为其 current 属性。

3.不能再函数组件上使用Ref属性,因为函数组件没有实例

示例代码

class CustomTextInput extends React.Component {
 constructor(props) {
   super(props); 
   this.textInput = React.createRef();  // 创建一个 ref 来存储 textInput 的 DOM 元素
   this.focusTextInput = this.focusTextInput.bind(this);
 }

 focusTextInput() {
   // 使用focus使 text 输入框获得焦点
   // 通过 "current" 来访问 DOM 节点
   this.textInput.current.focus();
 }

 render() {
   // 把 <input> ref 关联到 构造器里创建的 `textInput` 上
   return (
     <div>
       <input
         type="text"
         ref={this.textInput} />
       <input
         type="button"
         value="Focus the text input"
         onClick={this.focusTextInput}
       />
     </div>
   );
 }
}
//包装上面的 CustomTextInput,来模拟它挂载之后立即被点击的操作,我们可以使用 ref 来获取这个自定义的 input 组件并手动调用它的 focusTextInput 方法:
class AutoFocusTextInput extends React.Component {
  constructor(props) {
    super(props);
    this.textInput = React.createRef();
  }

  componentDidMount() {
    this.textInput.current.focusTextInput();
  }

  render() {
    return (
      <CustomTextInput ref={this.textInput} />
    );
  }
}

@Dogtiti Dogtiti removed the Cbayel label May 11, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants