美文网首页
React中React.forwardRef的使用方式

React中React.forwardRef的使用方式

作者: may505 | 来源:发表于2019-07-18 17:41 被阅读0次

一、众多周知可以forwardRef可以转发ref属性
比如要在父组件中调用子组件中某个DOM节点或者组件的ref

import React from 'react';
import { Button } from 'antd';

// 高阶组件
const Input = InputComponent => {
  const forwardRef = (props, ref) => {
    return (
      <InputComponent forwardedRef={ref} {...props}>
        <div>高级组件转发refs</div>
      </InputComponent>
    );
  };
  return React.forwardRef(forwardRef);
};

// 普通组件
const TextInput = ({ forwardedRef, children, ...rest }) => {
  return (
  <div>
    <input ref={forwardedRef} {...rest} />
    {children}
  </div>
  )
};

const InputField = Input(TextInput);

class HocRefs extends React.Component {
  constructor(props) {
    super(props);
    this.inputRef = React.createRef();
  }

  handleSubmit = () => {
    // 通过this.inputRef可以拿到TextInput组件中的input
  };

  render() {
    return (
      <div>
        <h1>高阶组件传递refs</h1>
        <InputField ref={this.inputRef} />
        <Button onClick={this.handleSubmit}>提交</Button>
      </div>
    );
  }
}
export default HocRefs;

二、除开传递ref值,还可以巧妙的传递自己想要的值,例如调用三方组件,三方组件接受一个自定义组件,想要在自定义组件获取额外的props。比如num,以下这种方式就不好处理。

class Child extends React.Component {
  state = {
    flag: true,
  };
  render() {
    const { Content } = this.props;
    return (
      <div>
        <h1>头部</h1>
        <div>
          <Content flag={this.state.flag} />
        </div>
        <div>底部</div>
      </div>
    );
  }
}

class Content extends React.Component {
  handleClick = () => {
    // 获取Father组件中的值,比如num
    console.log(this.props) // 只能够拿到Child组件传递的flag
  };

  render() {
    return (
      <div>
        <Button onClick={this.handleClick}>点击获取Father组件中的值</Button>
      </div>
    );
  }
}

class Father extends React.Component {
  state = {
    num: 1,
  };

  render() {
    return (
      <div>
        <Child Content={Content} />
      </div>
    );
  }
}
export default Father;

当然你也可以用redux,但是仅仅为了取一个值就用redux开销有点大, 这儿我们就可以巧妙的使用React.forwardRef,修改Father组件

class Father extends React.Component {
  state = {
    num: 1,
  };

  render() {
    return (
      <div>
        <Child
          Content={React.forwardRef((props, ref) => (
            // 其中props值为Child组件传递给Content的props
            <Content num={this.state.num} {...props} />
          ))}
        />
      </div>
    );
  }
}
export default Father;

这样在Content组件中既可以获取Child组件中flag也可以获取Father组件中传递的num

class Content extends React.Component {
  handleClick = () => {
    // 获取Father组件中的值
    console.log(this.props);
  };

  render() {
    return (
      <div>
        <Button onClick={this.handleClick}>点击获取Father组件中的值</Button>
      </div>
    );
  }
}

最后的结果


image.png

相关文章

  • React中React.forwardRef的使用方式

    一、众多周知可以forwardRef可以转发ref属性比如要在父组件中调用子组件中某个DOM节点或者组件的ref ...

  • React.forwardRef 与useImperativeH

    React.forwardRef 与useImperativeHandle结合使用,就能调用方法组件内的方法, 父...

  • react: React.forwardRef

    关键点就是React.forwardRef的API中ref必须指向dom元素而不是React组件。 一、React...

  • react ref

    在 React16 新版本中,新引入了 React.createRef 与 React.forwardRef 两个...

  • React.forwardRef和connect的联合使用问题

    先使用 React.forwardRef;再使用 connect 包一层会使 ref 属性漏掉,导致 内部实例无法...

  • React.forwardRef和connect的联合使用

    先使用 React.forwardRef再使用 connect 包一层会使 ref属性漏掉,导致 内部实例无法传到...

  • 组件ref的使用

    自己封装的组件,想使用ref,调用内部的方法1.使用React.forwardRef,包裹组件。 2.接收ref属...

  • React.forwardRef

    forwardRef,咋一看长的和useRef很像,既然很像,那么功能必定相似,因此猜想也是使用ref来引用一个D...

  • 如何在HTML中使用React

    如何在html中使用React,也就是在静态html中如何使用react的CND并且使用React。引入方式:在H...

  • 2022-07-04

    React.forwardRef会创建一个React组件,这个组件能够将其接受的ref属性转发到其组件树下的另一个...

网友评论

      本文标题:React中React.forwardRef的使用方式

      本文链接:https://www.haomeiwen.com/subject/rucrlctx.html