亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

React編程中需要注意的兩個(gè)錯(cuò)誤

 更新時(shí)間:2021年05月14日 11:30:52   作者:Zong_0915  
React可以說(shuō)是前端的先驅(qū)者,它總是會(huì)引領(lǐng)整個(gè)前端的潮流。 但我們?cè)谑褂靡步?jīng)常會(huì)遇到錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于React編程中需要注意的兩個(gè)錯(cuò)誤,需要的朋友可以參考下

前言

在React編程中, 我們習(xí)慣用useEffect、useState等Hook去進(jìn)行開發(fā),但是在開發(fā)過(guò)程中難免會(huì)遇到許多問(wèn)題,前陣子,我在寫代碼的時(shí)候,踩過(guò)不少坑,這里先列舉兩個(gè)較為常見的,也希望讀者們看完這篇文章能夠避免踩坑!

一. useEffect無(wú)限渲染

背景:

  • 頁(yè)面初始化的時(shí)候,我們需要通過(guò)useEffect()來(lái)進(jìn)行一些初始化工作。
  • 在useEffect()方法中,調(diào)用了代碼getData()去后臺(tái)調(diào)取數(shù)據(jù)。
  • 比如頁(yè)面所需的userName字段,我們?cè)讷@取數(shù)據(jù)后,調(diào)用setUserName(userName)來(lái)進(jìn)行賦值。

偽代碼如下:

import React, { useState, useEffect } from 'react';

const App = () => {
    const [userName, setUserName] = useState<string>('')
    
    useEffect(() => {
    	// 調(diào)取后臺(tái)接口
        const data = getData()
        // 賦值給對(duì)應(yīng)的State
        setUserName(data.userName)
    })

    return (
        <div>
            <span>用戶名:{userName}</span>
        </div>
    )
}
export default App;

這樣的代碼看似沒什么問(wèn)題,邏輯也很正確,但是實(shí)際效果會(huì)發(fā)生什么呢?來(lái)看下下面的例子:

import React, { useState, useEffect } from 'react';

const App = () => {
    const [count, setCount] = useState(0)
    useEffect(() => {
        setCount(count+1)
    })

    return (
        <div>
            <span>{count}</span>
        </div>
    )
}
export default App;

頁(yè)面效果如下:

大家測(cè)試一下就會(huì)發(fā)現(xiàn),頁(yè)面上的數(shù)字是會(huì)無(wú)限增長(zhǎng)的,而且你的電腦內(nèi)存一下子Up起來(lái)(可以聽聽你的電腦風(fēng)扇是不是吹得更猛了~)。

這個(gè)結(jié)果說(shuō)明了什么?說(shuō)明了useEffect()在無(wú)限的調(diào)用中。

原因分析如下:

  • useEffect()可以理解為初始化,那么初始化中對(duì) 有狀態(tài)的變量 進(jìn)行了值的更新。
  • 而通過(guò)useState()創(chuàng)建出來(lái)的 有狀態(tài)的變量 ,其值一旦發(fā)生改變,又會(huì)重新渲染頁(yè)面,那么又會(huì)重新調(diào)用useEffect()方法。
  • 因此就成了一個(gè)無(wú)限循環(huán)。最終造成上述圖片所展示的效果。

解決方案如下:useEffect()的第二個(gè)參數(shù)加一個(gè)空數(shù)組即可。

import React, { useState, useEffect } from 'react';

const App = () => {
    const [count, setCount] = useState(0)
    useEffect(() => {
        setCount(count+1)
    },[])

    return (
        <div>
            <span>{count}</span>
        </div>
    )
}
export default App;

那么useEffect()就只會(huì)執(zhí)行一次:

二. 帶狀態(tài)的變量賦給Input框作為默認(rèn)值,頁(yè)面無(wú)法修改內(nèi)容

廢話不說(shuō),直接上案例:

import React, { useState, useEffect } from 'react';

const App = () => {
    const [count, setCount] = useState('初始內(nèi)容')
    return (
        <div>
            <input type="text" value={count} />
        </div>
    )
}
export default App;

那么頁(yè)面的效果是這樣的:

可以發(fā)現(xiàn)我明明嘗試輸入字段,但是Input的內(nèi)容依舊無(wú)法改變。原因如下:

  • 我們用帶狀態(tài)的變量作為默認(rèn)值賦給Input后,頁(yè)面會(huì)顯示其初始內(nèi)容。
  • Input框的value值代表其內(nèi)容值,那么竟然和這個(gè)帶狀態(tài)的變量進(jìn)行了綁定,那么要想Input框的內(nèi)容發(fā)生改變,帶狀態(tài)的變量也必須改變,這樣才能觸發(fā)渲染。
  • 但是我們?cè)贗nput中輸入一些信息,而這個(gè)帶狀態(tài)的變量并沒有感知到這個(gè)變量的值發(fā)生了改變,所以頁(yè)面上的內(nèi)容也不會(huì)發(fā)生改變。

解決方案:給這個(gè)Input框增加一個(gè)onChange事件,讓其監(jiān)聽到內(nèi)容的改變,并實(shí)時(shí)的調(diào)用setXXX方法。

代碼如下:

import React, { useState, useEffect } from 'react';

const App = () => {
    const [count, setCount] = useState('初始內(nèi)容')
    return (
        <div>
            <input type="text" value={count} onChange={(event)=>setCount(event.target.value)}/>
        </div>
    )
}
export default App;

頁(yè)面效果如下:

總結(jié)

到此這篇關(guān)于React編程中需要注意的兩個(gè)錯(cuò)誤的文章就介紹到這了,更多相關(guān)React編程錯(cuò)誤內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解React 條件渲染

    詳解React 條件渲染

    這篇文章主要介紹了React 條件渲染的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • React中閉包陷阱的幾種情及解決方案

    React中閉包陷阱的幾種情及解決方案

    在react中我們使用其提供的Hooks中的useState,useEffect,useCallback 時(shí),可能會(huì)造成閉包陷阱,下面我們來(lái)看一下出現(xiàn)的情況以及如何解決,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-07-07
  • React跨路由組件動(dòng)畫實(shí)現(xiàn)

    React跨路由組件動(dòng)畫實(shí)現(xiàn)

    在 React 中路由之前的切換動(dòng)畫可以使用 react-transition-group 來(lái)實(shí)現(xiàn),但對(duì)于不同路由上的組件如何做到動(dòng)畫過(guò)渡是個(gè)很大的難題,目前社區(qū)中也沒有一個(gè)成熟的方案,本文給大家分享React跨路由組件動(dòng)畫實(shí)現(xiàn),感興趣的朋友一起看看吧
    2023-10-10
  • 你知道怎么在 HTML 頁(yè)面中使用 React嗎

    你知道怎么在 HTML 頁(yè)面中使用 React嗎

    這篇文章主要為大家詳細(xì)介紹了如何在HTML頁(yè)面中使用 React,使用使用js模塊化的方式開發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • react中如何使用監(jiān)聽

    react中如何使用監(jiān)聽

    在 React 中,您可以使用?addEventListener?函數(shù)來(lái)監(jiān)聽事件,本文通過(guò)實(shí)例代碼給大家介紹react中如何使用監(jiān)聽,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • React報(bào)錯(cuò)之Object?is?possibly?null的問(wèn)題及解決方法

    React報(bào)錯(cuò)之Object?is?possibly?null的問(wèn)題及解決方法

    這篇文章主要介紹了React報(bào)錯(cuò)之Object?is?possibly?null的問(wèn)題,造成 "Object is possibly null"的錯(cuò)誤是因?yàn)閡seRef()鉤子可以傳遞一個(gè)初始值作為參數(shù),而我們傳遞null作為初始值,本文給大家分享詳細(xì)解決方法,需要的朋友可以參考下
    2022-07-07
  • React實(shí)現(xiàn)監(jiān)聽粘貼事件并獲取粘貼板中的截圖

    React實(shí)現(xiàn)監(jiān)聽粘貼事件并獲取粘貼板中的截圖

    這篇文章主要介紹了React實(shí)現(xiàn)監(jiān)聽粘貼事件并獲取粘貼板中的截圖方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 詳解React路由傳參方法匯總記錄

    詳解React路由傳參方法匯總記錄

    這篇文章主要介紹了詳解React路由傳參方法匯總記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 詳解react-router 4.0 下服務(wù)器如何配合BrowserRouter

    詳解react-router 4.0 下服務(wù)器如何配合BrowserRouter

    這篇文章主要介紹了詳解react-router 4.0 下服務(wù)器如何配合BrowserRouter,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • React彈窗使用方式NiceModal重新思考

    React彈窗使用方式NiceModal重新思考

    這篇文章主要為大家介紹了React彈窗使用方式NiceModal重新思考分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評(píng)論