博客
关于我
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/

    你可能感兴趣的文章
    nginx 301 永久重定向
    查看>>
    nginx connect 模块安装以及配置
    查看>>
    nginx css,js合并插件,淘宝nginx合并js,css插件
    查看>>
    Nginx gateway集群和动态网关
    查看>>
    Nginx keepalived一主一从高可用,手把手带你一步一步配置!
    查看>>
    Nginx Location配置总结
    查看>>
    Nginx log文件写入失败?log文件权限设置问题
    查看>>
    Nginx Lua install
    查看>>
    nginx net::ERR_ABORTED 403 (Forbidden)
    查看>>
    Nginx SSL 性能调优
    查看>>
    Nginx SSL私有证书自签,且反代80端口
    查看>>
    Nginx upstream性能优化
    查看>>
    Nginx 中解决跨域问题
    查看>>
    nginx 代理解决跨域
    查看>>
    Nginx 做负载均衡的几种轮询策略分析
    查看>>
    Nginx 入门,一篇搞定!
    查看>>
    Nginx 利用代理转发请求示例
    查看>>
    Nginx 动静分离与负载均衡的实现
    查看>>
    Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
    查看>>
    nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
    查看>>