React 中 ref 的不良做法是什么?

2024-03-22

我正在学习 React。不同网站的一些人告诉大家,使用 refs 是一种不好的做法(是的,完全使用它们)。

真正的问题是什么?我将其附加到子组件(以便我可以访问内部内容)是不是有什么不好?

Thanks!


React 需要你思考反应方式 https://facebook.github.io/react/docs/thinking-in-react.htmlrefs 是 DOM 的后门,你几乎永远不需要使用它。为了大大简化,React 的思维方式是,一旦状态发生变化,就重新渲染all依赖于该状态的 UI 组件。 React 将负责确保仅更新 DOM 的正确部分,从而使整个过程高效并向您隐藏 DOM(有点)。

例如,如果您的组件托管 HTMLInputElement,则在 React 中您将连接一个事件处理程序来跟踪输入元素的更改。每当用户键入字符时,事件处理程序就会触发,并且在处理程序中,您将使用输入元素的新值更新状态。状态的更改会触发托管组件重新渲染自身,包括具有新值的输入元素。

这就是我的意思

import React from 'react';
import ReactDOM from 'react-dom';

class Example extends React.Component {

    state = {
      inputValue: ""
    }

    handleChange = (e) => {
      this.setState({
        inputValue: e.target.value
      })
    }

    render() {
        const { inputValue } = this.state
        return ( 
          <div>
            /**.. lots of awesome ui **/
            /** an input element **/
            <input value={inputValue} onChange={this.handleChange}} />
            /** ... some more awesome ui **/
          </div>
       )
  }
}


ReactDOM.render( <Example />, document.getElementById("app") );
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>


<div id="app">
</div>

请注意,只要输入值发生变化,处理程序就会被调用,setState 也会被调用,并且组件将完全重新呈现自身。

考虑 refs 通常是不好的做法,因为您可能会想只使用 refs 并按照 JQuery 方式做事,这不是 React 架构/思维方式的意图。

真正更好地理解它的最好方法是构建更多的 React 应用程序和组件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React 中 ref 的不良做法是什么? 的相关文章

随机推荐

  • 如何创建堆积线图

    在 R 中创建堆积条形图有多种解决方案 但如何绘制堆积线图呢 可以使用以下命令创建堆积线图ggplot2包裹 一些示例数据 set seed 11 df lt data frame a rlnorm 30 b 1 10 c rep LETT
  • 当报告需要很长时间运行时,如何解决套接字关闭的问题?

    我正在运行用 iReport 制作的 Clarity 报告 我的一份报告非常复杂 有时需要很长时间才能运行 取决于参数 有时 花了太长时间 我收到一条消息说 插座关闭 当报表快速运行时 不会出现此消息 我认为这意味着运行已超时 我目前正在努
  • 单元测试应该如何处理预期和意外的异常?

    当预期的异常发生时 它是否应该通过测试 当出现意外异常时 测试是否会失败 处理异常是否多余 因为它会使测试失败并因此充当测试 测试预期的异常 你必须添加expected属性具有预期的异常 因此如果抛出指定的异常 测试将通过 否则就会失败 例
  • 逐行编写 Lua 脚本

    我使用以下命令将 Lua 脚本添加到我的 C 应用程序中动态Lua http dynamiclua codeplex com 图书馆 它运作得很好 我想实现您获取正在执行的当前行 就像在 Visual Studio 中一样 并突出显示它 目
  • 将 opencv BackgroundSubtractorMOG 保存到文件吗?

    我使用 opencv 进行车辆计数过程 如何将我的BackgroundSubtractorMOG对象 例如BackgroundSubtractorMOG2等 保存到文件中 以便我可以从文件中读取它 再次使用经过训练的背景模型而无需长时间训练
  • Alphablend 和透明Blt

    这个问题与我有关先前的问题 https stackoverflow com q 12700165 62576 on SO 我想组合两个图层 并仅将 alpha 应用于源图层的特定部分 我尝试的一种方法是将 SourceConstantAlp
  • 从服务器的标头中获取标头令牌

    我如何更改代码才能获取令牌 因为它始终为空 控制台不会返回任何错误 并且在邮递员 应用程序 中服务器端正常工作 我在服务器端有这段代码 router post async req res gt const error validate re
  • 如何在TableLayout周围添加边框?

    下面是我的表代码 我的屏幕看起来像这样https i stack imgur com U5ppn jpg https i stack imgur com U5ppn jpg但我想让它看起来像这样https i stack imgur com
  • Javascript 中嵌套函数的返回值[重复]

    这个问题在这里已经有答案了 我有一个设置如下的函数 function mainFunction function subFunction var str foo return str var test mainFunction alert
  • PHP 混合类型与 Typescript 任意类型

    我正在尝试 PHPmixed输入自定义函数 但这个错误让我难住了 标点符号是我的 类型错误 参数 1 传递给 必须是一个实例mixed string given 下面的一些 示例 代码会导致错误消息并说明我希望实现的目标 下面是一些 TLD
  • 如何在前端使用 JavaScript Fetch API 从 FastAPI 后端下载文件?

    这是我的 FastAPI python 代码 它返回一个 ics file app get latLong async def read item lat float long float mainFunc lat long return
  • Node.js - PostgreSQL (pg):客户端已连接。您不能重复使用客户端

    我只是想编写简单的注册 登录系统 我正在尝试查找用户名是否存在 步骤如下 Go 本地主机 3000 用户 注册 page 填写所有字段并单击注册按钮 检查我的命令行如果用户名存在 它应该使用 console log 打印它 到目前为止一切正
  • CodeIgniter 中的公共函数与函数

    在 PHP 中 在类内部声明方法有什么区别 public function VS function 例如 public function contact data header Contact this gt load gt view ad
  • OAuth 2.0“state”和 OpenID“nonce”参数之间的区别?为什么状态不能重用?

    OAuth 2 0 定义了客户端在请求中发送的 状态 参数 以防止跨站请求攻击 OpenID 规范中也提到了 nonce 除了 ID 令牌而不是查询参数中返回 nonce 这一事实之外 它们似乎具有完全相同的目的 如果有人能解释他们为什么分
  • MySQLdb Connection 和 Cursor 对象可以在多个线程中安全使用吗?

    我在 Python 3 5 中使用 mysqlclient v1 3 10 连接到数据库后 您将获得一个连接对象 从中您将获得一个用于运行查询的游标对象 这些对象线程安全吗 即我可以创建一组然后在多个不同的 python 线程之间共享和使用
  • 有没有一个windows shell工具可以保存历史记录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 询问我们的问题推荐或查找工具 库或最喜欢的场外资源与 Stack Overflow 无关 因为它们往往会吸引固执己见的答案和垃圾邮件 反而
  • 如何在Visual Studio中在当前文档中生成代码?

    如果这是很容易搜索到的内容 我深表歉意 但我不太确定正确的搜索词是什么 我现在正在使用 Visual Studio 主要用于 Unity 开发 创建新脚本时 我经常声明一些私有成员变量 如下所示 private Rigidbody rigi
  • NSURLConnection 委托方法未被调用

    我正在尝试使用 NSURLConnection 的委托方法 当前未调用以下方法 void connectionDidFinishLoading NSURLConnection connection void connection NSURL
  • 我应该锁定“事件”吗?

    在以下情况下我应该锁定事件 事件 foo 线程 A 将调用 foo handler 线程 B 将调用 foo handler 我应该锁定 foo 吗 锁定foo这是一个坏主意 因为该值每次都会改变 你应该锁定一个变量doesn t chan
  • React 中 ref 的不良做法是什么?

    我正在学习 React 不同网站的一些人告诉大家 使用 refs 是一种不好的做法 是的 完全使用它们 真正的问题是什么 我将其附加到子组件 以便我可以访问内部内容 是不是有什么不好 Thanks React 需要你思考反应方式 https