迹忆客 专注技术分享

当前位置:主页 > 学无止境 > WEB前端 > React >

函数组件在 React 中不能有字符串引用

作者:迹忆客 最近更新:2022/12/27 浏览次数:

当我们在函数组件中使用字符串作为引用时,会出现“Function components cannot have string refs”的错误。 要解决该错误,请使用 useRef() 钩子获取一个可变的 ref 对象,我们可以将其用作组件内部的 ref。

下面是产生上述错误的示例代码

export default function App() {
  // A string ref has been found within a strict mode tree.
  // ⛔️ Function components cannot have string refs.
  // We recommend using useRef() instead.
  return (
    <div>
      <input type="text" id="message" ref="msg" />
    </div>
  );
}

函数组件在 React 中不能有字符串引

代码片段中的问题是我们使用字符串作为引用。

要解决该错误,请改用 useRef 钩子来获取可变引用对象。

import {useEffect, useRef} from 'react';

export default function App() {
  const refContainer = useRef(null);

  useEffect(() => {
    // 👇️ this is reference to input element
    console.log(refContainer.current);

    refContainer.current.focus();
  }, []);

  return (
    <div>
      <input type="text" id="message" ref={refContainer} />
    </div>
  );
}

useRef() 钩子可以传递一个初始值作为参数。 该钩子返回一个可变的 ref 对象,其 .current 属性被初始化为传递的参数。

请注意 ,我们必须访问 ref 对象的当前属性才能访问我们设置 ref 属性的输入元素。

当我们将 ref prop 传递给元素时,例如 ,React将ref对象的.current属性设置为对应的DOM节点。

useRef 钩子创建一个普通的 JavaScript 对象,但在每次渲染时都会为您提供相同的 ref 对象。 换句话说,它几乎是一个具有 .current 属性的记忆对象值。

需要注意的是,当你更改 ref 的当前属性的值时,不会导致重新渲染。

例如,ref 不必包含在 useEffect 钩子的依赖项数组中,因为更改它的当前属性不会导致重新渲染。

import {useEffect, useRef} from 'react';

export default function App() {
  const refContainer = useRef(null);

  const refCounter = useRef(0);

  useEffect(() => {
    // 👇️ this is reference to input element
    console.log(refContainer.current);
    refContainer.current.focus();

    // 👇️ incrementing ref value does not cause re-render
    refCounter.current += 1;
    console.log(refCounter.current);
  }, []);


  return (
    <div>
      <input type="text" id="message" ref={refContainer} />
    </div>
  );
}

示例中的 useEffect 钩子只运行了 2 次,因为 useRef 在其内容更改时不会通知我们。

更改对象的当前属性不会导致重新渲染。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

MySQL 中将字符串附加到现有字段

发布时间:2023/05/08 浏览次数:63 分类:MySQL

本文我们将学习使用 CONCAT() 和 CONCAT_WS() 函数在 MySQL 字段中连接或附加字符串值。使用 CONCAT() 和 CONCAT_WS() 将字符串附加到 MySQL 中的现有字段

MySQL 将字符串拆分成行

发布时间:2023/05/08 浏览次数:68 分类:MySQL

在本文中,我们将讨论什么是将字符串拆分为行以及如何创建一个自执行函数。 我们主要讨论 SUBSTRING_INDEX() 方法以及一些示例以轻松理解该概念。

在 MongoDB 中将字符串转换为日期

发布时间:2023/04/20 浏览次数:63 分类:MongoDB

MongoDB 是一个越来越受欢迎的优秀平台。 在它提供的各种功能中,MongoDB 还允许您将数据从一种类型转换为另一种类型。本文介绍了在各种版本的 MongoDB 中将字符串转换为日期字段的方法。

如何从 Python 中的字符串中删除第一个字符

发布时间:2023/04/11 浏览次数:118 分类:Python

在Python中,要删除一个字符串的第一个字符,可以使用切片操作或者字符串方法。 方法一:使用切片操作 在Python中,可以使用切片操作来获取字符串的子字符串。切片操作使用方括号

如何从 Python 中的字符串中删除特殊字符

发布时间:2023/04/11 浏览次数:272 分类:Python

在Python中,可以使用多种方法来删除字符串中的特殊字符。在本文中,我们将介绍一些最常见的方法。 方法一:使用replace()方法删除特殊字符 可以使用字符串的 replace() 方法来删除字符

如何在 Python 中将字符串转换为双精度

发布时间:2023/04/11 浏览次数:191 分类:Python

在Python中,将字符串转换为双精度浮点数(double)可以使用内置的 float() 函数。在本文中,我们将介绍如何使用 float() 函数将字符串转换为双精度浮点数,并讨论一些相关问题。 使用

如何在 C++ 中把字符串转换为小写

发布时间:2023/04/09 浏览次数:63 分类:C++

介绍了如何将 C++ std::string 转换为小写的方法。当我们在考虑 C++ 中的字符串转换方法时,首先要问自己的是我的输入字符串有什么样的编码

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便