博客
关于我
React 学习笔记 —— refs 属性的三种书写方式
阅读量:570 次
发布时间:2019-03-09

本文共 2189 字,大约阅读时间需要 7 分钟。

React框架提供了三种给ref赋值的方式,可以根据具体需求选择合适的方法。在实际开发中,ref的使用需要谨慎,因为它会对React的更新机制产生影响。以下将从不同的方式入手,讲解其使用方法和注意事项。

ref的三种书写方式

1. 字符串形式(简单,但可能被废弃)

这种方式是最初使用ref的方式,通过给元素或者组件的ref属性直接赋值字符串。示例代码如下:

class Demo extends React.Component {  render() {    return (      
); }}

注意事项:

  • UIScreen’ss ref的字符串形式虽然简单,但存在问题:
    • 在大型应用中会导致内存泄漏和性能问题
    • 在新版本React中可能会移除这种方式
  • 推荐在简单的项目或不频繁更新的组件中使用

2. 回调形式(开发者常用的方式)

回调形式通过函数作为ref的值,可以灵活地操作 DOM 节点。这种方式在 refs 进行 DOM 操作时更为常用。示例代码如下:

class Demo extends React.Component {  showData = () => {    const { left } = this;    alert(left.value);  };  showData2 = () => {    const { right } = this;    console.log(this);    alert(right.value);  };  render() {    return (      
{ this.left = c; console.log('@', c); }} type="text" placeholder="点击右侧按钮弹出该框的内容" />
{ this.right = c; }} onBlur={this.showData2} type="text" placeholder="失去焦点提示该框的内容" />
); }}

小问题:

  • 内联函数的调用问题:
    • 在状态更新时,内联函数可能会被多次调用
    • 第一次调用时,参数为 null(用于清空状态)
    • 第二次调用时,参数为所绑定的DOM元素

解决方法:

  • 使用类方法(闭包函数)绑定 ref 函数,避免多次调用
  • 示例代码如下:
class Demo extends React.Component {  saveInput(c) {    this.left = c;    console.log('@', c);  }  render() {    return (      
); }}

3. createRef形式(官方推荐)

createRef 方法是 React 推荐的方式,创建一个专门的 ref 容器。每个容器只能容纳一个 ref 节点。示例代码如下:

class Demo extends React.Component {  myRef = React.createRef();  showData = () => {    alert(this.myRef.current.value);  };  render() {    return (      
); }}

注意事项:

  • createRef 的限制:
    • 每个容器只能存储一个 ref 节点
    • 如果需要操作多个 ref 节点,需要分别创建多个容器
  • 在多数情况下,createRef 是最佳选择

ref 的使用原则

  • 减少 ref 的使用:
    • 如果 ref 的作用是为了操作 DOM 节点,建议直接通过 event.target 获取元素
    • 示例代码如下:
  • class Demo extends React.Component {  showData2 = (event) => {    alert(event.target.value);  };  render() {    return (      
    ); }}
    1. ** refs 的绑定需要谨慎:**
      • 如果 ref 的使用导致多次更新,可能会影响 React 的状态机
      • 建议通过类方法绑定函数,避免内联函数带来的问题
    2. 总结

      ref 的三种形式各有优缺点,建议根据项目需求选择合适的方式。在使用 refs 的过程中,应注意减少不必要的操作,遵循 React 的最佳实践。此外, Sevilla.js 函数允许开发者通过回调或 createRef 的方式灵活管理 DOM 节点,确保代码高效且易于维护。

    转载地址:http://mcxpz.baihongyu.com/

    你可能感兴趣的文章
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_插入时如果目标表中已存在该数据则自动改为更新数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0058
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0_Postgresql和Mysql同时指定库_指定多表_全量同步到Mysql数据库以及Hbase数据库中---大数据之Nifi工作笔记0060
    查看>>
    NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
    查看>>
    NIFI1.21.0最新版本安装_配置使用HTTP登录_默认是用HTTPS登录的_Https登录需要输入用户名密码_HTTP不需要---大数据之Nifi工作笔记0051
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增加修改实时同步_使用JsonPath及自定义Python脚本_03---大数据之Nifi工作笔记0055
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
    查看>>
    NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
    查看>>