前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >React的Refs方法获取DOM实例 和 访问子组件方法及属性

React的Refs方法获取DOM实例 和 访问子组件方法及属性

作者头像
小弟调调
发布2018-10-18 10:39:52
4.8K0
发布2018-10-18 10:39:52
举报
文章被收录于专栏:埋名埋名

React 支持一种非常特殊的属性 Ref ,你可以用来绑定到 render() 输出的任何组件上。

  • ref : 绑定属性
  • refs : 调用的时候使用

调用子组件方法

这是一个很神奇的方法refs,它可以调用子组件的方法以及属性。下面用一个例子来实现调用子组件方法。

建立组件

建立子组件MyComponent.js,并在子组件实现一个方法,如:subHandleClick,这个方法实现变更当前组件上面的文本,提供这样一个测试用例。

使用子组件

通过import SubComponent from './SubComponent'来引用子组件SubComponent,在 render方法中注册使用组件

代码语言:javascript
复制
render(){  
  return(    
    <SubComponent/>
  )
}

绑定ref属性

在子组件调用上面绑定一个值为subcomponents的属性refsubcomponents

代码语言:javascript
复制
<SubComponent ref="subcomponents" />

调用子组件方法

在入口父组件App.js中,添加方法handleClick,去调用子组件SubComponent.js中的subHandleClick方法

代码语言:javascript
复制
handleClick(){  
  //this.refs.subcomponents可以访问子组件的方法
  //也可以获取子组件的state...
  this.refs.subcomponents.subHandleClick();
}

完整实例

入口父组件App.js

代码语言:javascript
复制
import React, { Component } from 'react';
import SubComponent from './SubComponent'

class MyComponent extends Component {
  handleClick(){    
    this.refs.subcomponents.subHandleClick();
  }
  render(){    
    return(      
      <div>
        <input
          type="button"
          value="点我调用子组件方法"
          onClick={this.handleClick.bind(this)}
        />
        <SubComponent ref="subcomponents" />
      </div>
    )
  }
}

ReactDOM.render(  
  <MyComponent/>, 
  document.querySelector('#app')
);

子组件SubComponent.js

代码语言:javascript
复制
import React, { Component } from 'react';
export default class SubComponent extends Component {
  constructor(props) {
    super(props);    this.state = {
      text: '这里是初始化文本'
    };
  }
  subHandleClick(){    
    this.setState({text: '文本被改变啦!哈哈!'})
  }
  render(){    
    return(      
      <div>
        查看:{this.state.text}      
      </div>
    )
  }
}

获取DOM实例

通过ref属性,你可获取,实例中的属性方法,甚至可以通过他获取到DOM实例节点this.refs.myInput.getDOMNode()

绑定 ref 属性

代码语言:javascript
复制
<input type="text" ref="myInput" />

refs 获取DOM实例

获取支撑实例( backing instance )。这样就可以确保在任何时间总是拿到正确的实例。

代码语言:javascript
复制
// 输入框获取焦点
this.refs.myInput.focus()

完整实例

代码语言:javascript
复制
import React, { Component } from 'react';
class MyComponent extends Component {
  handleClick(){    
    this.refs.myInput.focus();
  }
  render(){    
    return(      
      <div>
        <input 
          type="text" 
          ref="myInput" 
        />
        <input
          type="button"
          value="点我输入框获取焦点"
          onClick={this.handleClick.bind(this)}
        />
      </div>
    )
  }
}

ReactDOM.render(  
  <MyComponent/>, 
  document.querySelector('#app')
);
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JSdig 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 调用子组件方法
    • 建立组件
      • 使用子组件
        • 绑定ref属性
          • 调用子组件方法
            • 完整实例
            • 获取DOM实例
              • 绑定 ref 属性
                • refs 获取DOM实例
                  • 完整实例
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档