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

React編程中需要注意的兩個錯誤

 更新時間:2021年05月14日 11:30:52   作者:Zong_0915  
React可以說是前端的先驅者,它總是會引領整個前端的潮流。 但我們在使用也經(jīng)常會遇到錯誤,下面這篇文章主要給大家介紹了關于React編程中需要注意的兩個錯誤,需要的朋友可以參考下

前言

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

一. useEffect無限渲染

背景:

  • 頁面初始化的時候,我們需要通過useEffect()來進行一些初始化工作。
  • 在useEffect()方法中,調用了代碼getData()去后臺調取數(shù)據(jù)。
  • 比如頁面所需的userName字段,我們在獲取數(shù)據(jù)后,調用setUserName(userName)來進行賦值。

偽代碼如下:

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

const App = () => {
    const [userName, setUserName] = useState<string>('')
    
    useEffect(() => {
    	// 調取后臺接口
        const data = getData()
        // 賦值給對應的State
        setUserName(data.userName)
    })

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

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

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;

頁面效果如下:

大家測試一下就會發(fā)現(xiàn),頁面上的數(shù)字是會無限增長的,而且你的電腦內存一下子Up起來(可以聽聽你的電腦風扇是不是吹得更猛了~)。

這個結果說明了什么?說明了useEffect()在無限的調用中。

原因分析如下:

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

解決方案如下:useEffect()的第二個參數(shù)加一個空數(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()就只會執(zhí)行一次:

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

廢話不說,直接上案例:

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

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

那么頁面的效果是這樣的:

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

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

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

代碼如下:

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

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

頁面效果如下:

總結

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

相關文章

  • React-router?v6在Class組件和非組件代碼中的正確使用

    React-router?v6在Class組件和非組件代碼中的正確使用

    這篇文章主要介紹了React-router?v6在Class組件和非組件代碼中的正確使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • react配置代理setupProxy.js無法訪問v3.0版本問題

    react配置代理setupProxy.js無法訪問v3.0版本問題

    這篇文章主要介紹了react配置代理setupProxy.js無法訪問v3.0版本問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • React useReducer終極使用教程

    React useReducer終極使用教程

    useReducer是在react V16.8推出的鉤子函數(shù),從用法層面來說是可以代替useState。相信前期使用過 React 的前端同學,大都會經(jīng)歷從class語法向hooks用法的轉變,react的hooks編程給我們帶來了絲滑的函數(shù)式編程體驗
    2022-10-10
  • 作為老司機使用 React 總結的 11 個經(jīng)驗教訓

    作為老司機使用 React 總結的 11 個經(jīng)驗教訓

    這篇文章主要介紹了作為老司機使用 React 總結的 11 個經(jīng)驗教訓,需要的朋友可以參考下
    2017-04-04
  • 深入理解react-router@4.0 使用和源碼解析

    深入理解react-router@4.0 使用和源碼解析

    這篇文章主要介紹了深入理解react-router@4.0 使用和源碼解析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • react如何快速設置文件路徑別名

    react如何快速設置文件路徑別名

    React是用于構建用戶界面的JavaScript庫, 起源于Facebook的內部項目,這篇文章主要介紹了react如何快速設置文件路徑別名,需要的朋友可以參考下
    2021-04-04
  • react高階組件經(jīng)典應用之權限控制詳解

    react高階組件經(jīng)典應用之權限控制詳解

    在React中,高階組件是重用組件邏輯的一項高級技術。下面這篇文章主要給大家介紹了關于react高階組件經(jīng)典應用之權限控制的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-09-09
  • React使用Ant Design方式(簡單使用)

    React使用Ant Design方式(簡單使用)

    文章介紹了AntDesign組件庫,它是基于AntDesign設計體系的ReactUI組件庫,主要用于研發(fā)企業(yè)級中后臺產(chǎn)品,文章詳細講解了如何下載和按需引入antd組件庫,并通過一個小案例展示了如何使用antd進行布局和改造,最后,文章提醒大家在使用過程中可以參考官網(wǎng)的屬性介紹
    2024-11-11
  • React可定制黑暗模式切換開關組件

    React可定制黑暗模式切換開關組件

    這篇文章主要為大家介紹了React可定制黑暗模式切換開關組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • React的Props、生命周期詳解

    React的Props、生命周期詳解

    “Props” 是 React 中用于傳遞數(shù)據(jù)給組件的一種機制,通常作為組件的參數(shù)進行傳遞,在 React 中,props 是只讀的,意味著一旦將數(shù)據(jù)傳遞給組件的 props,組件就不能直接修改這些 props 的值,這篇文章主要介紹了React的Props、生命周期,需要的朋友可以參考下
    2024-06-06

最新評論

旺苍县| 论坛| 漳浦县| 临湘市| 弥勒县| 客服| 浏阳市| 自治县| 天台县| 淅川县| 历史| 布拖县| 安新县| 容城县| 临高县| 从江县| 临城县| 衢州市| 西平县| 东乡族自治县| 当阳市| 分宜县| 兴城市| 台州市| 定安县| 万宁市| 潼关县| 临澧县| 栾川县| 西峡县| 甘泉县| 冷水江市| 永川市| 辽阳市| 兴化市| 汶上县| 开鲁县| 天镇县| 闽侯县| 如皋市| 甘南县|