最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React報(bào)錯(cuò)Function?components?cannot?have?string?refs

 更新時(shí)間:2022年12月16日 08:43:38   作者:chuck  
這篇文章主要為大家介紹了React報(bào)錯(cuò)Function?components?cannot?have?string?refs解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

總覽

當(dāng)我們?cè)谝粋€(gè)函數(shù)組件中使用一個(gè)字符串作為ref時(shí),會(huì)產(chǎn)生"Function components cannot have string refs"錯(cuò)誤。為了解決該錯(cuò)誤,使用useRef()鉤子來(lái)得到一個(gè)可變的ref對(duì)象,這樣你就可以在組件中作為ref使用。

這里有個(gè)示例用來(lái)展示錯(cuò)誤是如何發(fā)生的。

// App.js
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>
  );
}

上述代碼片段的問(wèn)題在于,我們使用了字符串作為ref。

useRef

為了解決該錯(cuò)誤,使用useRef鉤子來(lái)獲取可變的ref對(duì)象。

// App.js
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()鉤子可以被傳遞一個(gè)初始值作為參數(shù)。該鉤子返回一個(gè)可變的ref對(duì)象,其.current屬性被初始化為傳遞的參數(shù)。

需要注意的是,我們必須訪(fǎng)問(wèn)ref對(duì)象上的current屬性,以獲得對(duì)我們?cè)O(shè)置了ref屬性的input元素的訪(fǎng)問(wèn)。

當(dāng)我們傳遞ref屬性到元素上時(shí),比如說(shuō),<input ref={myRef} /> 。React將ref對(duì)象上的.current屬性設(shè)置為相應(yīng)的DOM節(jié)點(diǎn)。

useRef鉤子創(chuàng)建了一個(gè)普通的JavaScript對(duì)象,但在每次渲染時(shí)都給你相同的ref對(duì)象。換句話(huà)說(shuō),它幾乎是一個(gè)帶有.current屬性的記憶化對(duì)象值。

不會(huì)重新渲染

應(yīng)該注意的是,當(dāng)你改變refcurrent屬性的值時(shí),不會(huì)引起重新渲染。

例如,一個(gè)ref不需要包含在useEffect鉤子的依賴(lài)數(shù)組中,因?yàn)楦淖兯?code>current屬性不會(huì)引起重新渲染。

// App.js
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鉤子只運(yùn)行了2次,因?yàn)?code>useRef在其內(nèi)容發(fā)生變化時(shí)并沒(méi)有通知我們。

改變對(duì)象的current屬性并不會(huì)導(dǎo)致重新渲染。

以上就是React報(bào)錯(cuò)Function components cannot have string refs的詳細(xì)內(nèi)容,更多關(guān)于React報(bào)錯(cuò)Function components cannot have string refs的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解基于webpack搭建react運(yùn)行環(huán)境

    詳解基于webpack搭建react運(yùn)行環(huán)境

    本篇文章主要介紹了詳解基于webpack搭建react運(yùn)行環(huán)境,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • React使用Props實(shí)現(xiàn)父組件向子組件傳值

    React使用Props實(shí)現(xiàn)父組件向子組件傳值

    在React中,組件之間的數(shù)據(jù)傳遞通常是通過(guò)屬性(Props)來(lái)實(shí)現(xiàn)的,父組件可以通過(guò)屬性向子組件傳遞數(shù)據(jù),這是React組件通信的基礎(chǔ)模式之一,本文將探討如何使用Props來(lái)實(shí)現(xiàn)父組件向子組件傳遞數(shù)據(jù),需要的朋友可以參考下
    2025-04-04
  • React?Hook實(shí)現(xiàn)對(duì)話(huà)框組件

    React?Hook實(shí)現(xiàn)對(duì)話(huà)框組件

    這篇文章主要為大家詳細(xì)介紹了React?Hook實(shí)現(xiàn)對(duì)話(huà)框組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • React使用Electron開(kāi)發(fā)桌面端的詳細(xì)流程步驟

    React使用Electron開(kāi)發(fā)桌面端的詳細(xì)流程步驟

    React是一個(gè)流行的JavaScript庫(kù),用于構(gòu)建Web應(yīng)用程序,結(jié)合Electron框架,可以輕松地將React應(yīng)用程序打包為桌面應(yīng)用程序,本文詳細(xì)介紹了使用React和Electron開(kāi)發(fā)桌面應(yīng)用程序的步驟,需要的朋友可以參考下
    2023-06-06
  • React使用redux基礎(chǔ)操作詳解

    React使用redux基礎(chǔ)操作詳解

    這篇文章主要介紹了如何在React中直接使用Redux,目前redux在react中使用是最多的,所以我們需要將之前編寫(xiě)的redux代碼,融入到react當(dāng)中去,本文給大家詳細(xì)講解,需要的朋友可以參考下
    2023-01-01
  • React中setState是同步的還是異步的

    React中setState是同步的還是異步的

    這篇文章主要介紹了React中setState是同步的還是異步的,這是一個(gè)經(jīng)典的 React 面試題,但答案并不是簡(jiǎn)單的“同步”或“異步”,需要分情況討論,下面就來(lái)詳細(xì)的介紹一下
    2026-06-06
  • React大文件分片上傳原理及方案

    React大文件分片上傳原理及方案

    前端進(jìn)行大文件分片上傳的方案幾乎都是利用Blob.prototype.slice方法對(duì)文件進(jìn)行分片,用數(shù)組將每一個(gè)分片存起來(lái),最后將分片發(fā)給后端,本文給大家介紹React大文件分片上傳方案,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • React創(chuàng)建對(duì)話(huà)框組件的方法實(shí)例

    React創(chuàng)建對(duì)話(huà)框組件的方法實(shí)例

    在項(xiàng)目開(kāi)發(fā)過(guò)程中,對(duì)于復(fù)雜的業(yè)務(wù)選擇功能很常見(jiàn),下面這篇文章主要給大家介紹了關(guān)于React創(chuàng)建對(duì)話(huà)框組件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • React Fragment介紹與使用詳解

    React Fragment介紹與使用詳解

    本文主要介紹了React Fragment介紹與使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • react實(shí)現(xiàn)動(dòng)態(tài)增減表單項(xiàng)的示例代碼

    react實(shí)現(xiàn)動(dòng)態(tài)增減表單項(xiàng)的示例代碼

    在做項(xiàng)目的時(shí)候,甲方給的信息有限,網(wǎng)頁(yè)的備案信息寫(xiě)成固定的,之后驗(yàn)收的時(shí)候,甲方要求把這個(gè)備案信息寫(xiě)成動(dòng)態(tài)的,可以自增減,下面通過(guò)實(shí)例代碼給大家介紹react實(shí)現(xiàn)動(dòng)態(tài)增減表單項(xiàng)的示例,感興趣的朋友跟隨小編一起看看吧
    2024-05-05

最新評(píng)論

天门市| 桐城市| 进贤县| 介休市| 资源县| 百色市| 东乌| 平陆县| 阿鲁科尔沁旗| 海原县| 卓尼县| 和田县| 邻水| 潮州市| 略阳县| 昂仁县| 册亨县| 平武县| 陆川县| 陈巴尔虎旗| 乡城县| 汶上县| 秦皇岛市| SHOW| 长治县| 赫章县| 治县。| 中宁县| 响水县| 神木县| 喀喇| 石棉县| 广平县| 临沭县| 临潭县| 衡水市| 垦利县| 察雅县| 多伦县| 高要市| 卓资县|