当前位置:   article > 正文

ref用法

ref用法

 

目录

React中提供两种方法创建ref对象:

类组件获取 Ref 三种方式

① Ref属性是一个字符串。

② Ref 属性是一个函数。

③ Ref属性是一个ref对象。

高级用法1:forwardRef 转发 Ref

高级用法2:ref实现组件通信


【ref作用】:最熟悉的就是  用 Ref 获取真实 DOM 元素和获取类组件实例,除此之外的功能,ref 派生出一些其他的高级用法,能够解决一些特殊场景下的问题

React中提供两种方法创建ref对象:

        第一种: 类组件中  React.createRef 创建一个 ref 对象。

  1. class Index extends React.Component{
  2. constructor(props){
  3. super(props)
  4. this.currentDom = React.createRef(null)
  5. }
  6. componentDidMount(){
  7. console.log(this.currentDom)
  8. }
  9. render= () => <div ref={ this.currentDom } >ref对象模式获取元素或组件</div>
  10. }

        第二种:函数组件中  React.useRef 创建 Ref

  1. export default function Index(){
  2. const currentDom = React.useRef(null)
  3. React.useEffect(()=>{
  4. console.log( currentDom.current ) // div
  5. },[])
  6. return <div ref={ currentDom } >ref对象模式获取元素或组件</div>
  7. }

【什么是 ref 对象,所谓 ref 对象就是用 createRef 或者 useRef 创建出来的对象】

【问:在函数组件中为什么不能用 createRef ?】
        答:类组件有一个实例 instance 能够维护像 ref 这种信息,但函数组件每次更新时所有的变量都会重新声明,此时 ref 就会随着函数组件执行被重置。


类组件获取 Ref 三种方式

  • ① Ref属性是一个字符串。
  1. /* 类组件 */
  2. class Children extends Component{
  3. render=()=><div>hello,world</div>
  4. }
  5. /* TODO: Ref属性是一个字符串 */
  6. export default class Index extends React.Component{
  7. componentDidMount(){
  8. console.log(this.refs)
  9. }
  10. render=()=> <div>
  11. <div ref="currentDom" >字符串模式获取元素或组件</div>
  12. <Children ref="currentComInstance" />
  13. </div>
  14. }

React 在底层逻辑,会判断类型,如果是 DOM 元素,会把真实 DOM 绑定在组件 this.refs (组件实例下的 refs )属性上,如果是类组件,会把子组件的实例绑定在 this.refs 上。(函数组件没有实例,不能被 Ref 标记)

  • ② Ref 属性是一个函数。
  1. class Children extends React.Component{
  2. render=()=><div>hello,world</div>
  3. }
  4. /* TODO: Ref属性是一个函数 */
  5. export default class Index extends React.Component{
  6. currentDom = null
  7. currentComponentInstance = null
  8. componentDidMount(){
  9. console.log(this.currentDom)
  10. console.log(this.currentComponentInstance)
  11. }
  12. render=()=> <div>
  13. <div ref={(node)=> this.currentDom = node } >Ref模式获取元素或组件</div>
  14. <Children ref={(node) => this.currentComponentInstance = node } />
  15. </div>
  16. }

  • ③ Ref属性是一个ref对象。
  1. class Children extends React.Component{
  2. render=()=><div>hello,world</div>
  3. }
  4. export default class Index extends React.Component{
  5. currentDom = React.createRef(null)
  6. currentComponentInstance = React.createRef(null)
  7. componentDidMount(){
  8. console.log(this.currentDom)
  9. console.log(this.currentComponentInstance)
  10. }
  11. render=()=> <div>
  12. <div ref={ this.currentDom } >Ref对象模式获取元素或组件</div>
  13. <Children ref={ this.currentComponentInstance } />
  14. </div>
  15. }

高级用法1:forwardRef 转发 Ref

高级用法2:ref实现组件通信

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/79683
推荐阅读
相关标签
  

闽ICP备14008679号