国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

React突變狀態(tài),更新數(shù)據(jù)(對(duì)象或者數(shù)組),頁(yè)面數(shù)據(jù)不刷新的問(wèn)題

這篇具有很好參考價(jià)值的文章主要介紹了React突變狀態(tài),更新數(shù)據(jù)(對(duì)象或者數(shù)組),頁(yè)面數(shù)據(jù)不刷新的問(wèn)題。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

React 突變狀態(tài)

? 剛開(kāi)始開(kāi)發(fā)時(shí),我們可能會(huì)遇到這樣的問(wèn)題,使用useState創(chuàng)建對(duì)象或者數(shù)組時(shí),setState時(shí),頁(yè)面未進(jìn)行更新。這里其實(shí)是一個(gè)突變狀態(tài)的問(wèn)題

  • 什么是突變狀態(tài)?

    ? 當(dāng)我們給setState一個(gè)基本數(shù)據(jù)類型時(shí),state值將會(huì)是一個(gè)不可變的值

    ? 更新時(shí),state原始值也不會(huì)被更改,而是重新創(chuàng)建一個(gè)不可變的的基本數(shù)據(jù)類型,以觸發(fā)重新渲染

  • 為什么React不推薦突變狀態(tài)?

    • 調(diào)試:如果你使用console.log 并且不改變狀態(tài),你過(guò)去的日志將不會(huì)被最近的狀態(tài)破壞修改,你可以清楚的看到渲染之間的狀態(tài)變化

    • 優(yōu)化:如果之前的propsstate和下一個(gè)狀態(tài)相同,常見(jiàn)的react優(yōu)化策略將會(huì)跳過(guò)本次渲染,如果你從不改變狀態(tài),檢查變化就會(huì)非常的快,如果prevProps === props,react就可以確定它內(nèi)部并沒(méi)有發(fā)生變化

    • 新功能:react正在構(gòu)建的新功能依賴將狀態(tài)視為快照,如果你正在更新過(guò)去的狀態(tài)版本,這會(huì)導(dǎo)致無(wú)法使用新功能

    • 需求變更:一些需要撤銷/重做和顯示歷史記錄的值,在沒(méi)有突變的情況下更容易執(zhí)行,這是因?yàn)槟憧梢詫⑦^(guò)去的值保存在副本中,并在適用的情況下重做他們

    • 更簡(jiǎn)單的實(shí)現(xiàn):因?yàn)?code>react不依賴突變,所以它不需要對(duì)你的對(duì)象做任何處理,不需要劫持你的對(duì)象??偸菍⑺鼈儼b到代理中,或者在初始化時(shí)像許多“反應(yīng)式”解決方案那樣做其他工作。這也是為什么 react 允許您將任何對(duì)象置于狀態(tài)(無(wú)論有多大)而沒(méi)有額外的性能或正確性陷阱。

  • 如何更合理的更新對(duì)象或者數(shù)組

    看這樣一段代碼:

    import React from "react";
    import ShoppingList from './ShoppingList';
    import NewItemForm from './NewItemForm';
    function App({
        const [items,setItems] = React.usestateC['apple','banana']);
        function handleAddItem(value) {
            items.push(value);
        	setItems(items);
        }
        return (
            <div>
            	{items.length > 0 && <ShoppingList items={items}/>}
                <NewItemForm handleAddItem={handleAddItem}/>
            </div>
        )
    }
    export default App;
    

    ? 每當(dāng)增加一個(gè)新項(xiàng)目時(shí),handleAddItem 函數(shù)就會(huì)被調(diào)用。但是,它并不起作用!當(dāng)我們輸入一個(gè)項(xiàng)目并提交表單時(shí),該項(xiàng)目沒(méi)有被添加到購(gòu)物清單中。

    ? 問(wèn)題就在于我們違反了 React 中最核心的原則 —— 不可變狀態(tài)。React依靠一個(gè)狀態(tài)變量的地址來(lái)判斷狀態(tài)是否發(fā)生了變化。當(dāng)我們把一個(gè)項(xiàng)目推入一個(gè)數(shù)組時(shí),我們并沒(méi)有改變?cè)摂?shù)組的地址,所以 React 無(wú)法判斷該值已經(jīng)改變。從技術(shù)上講可以改變對(duì)象或者數(shù)組本身的內(nèi)容,我們將其稱之為突變,然而,react的狀態(tài)在技術(shù)上是可變的,但react仍然推薦使用不可變的方式去改變react的狀態(tài)。像基本數(shù)據(jù)類型一樣,去始終替換他們,而不是去改變他們

    正確的做法:

    function handleAddItem(value) {
      const nextItems = [...items, value];
      setItems(nextItems);
    }
    

    ? 不建議修改一個(gè)現(xiàn)有的數(shù)組,而是從頭開(kāi)始創(chuàng)建一個(gè)新的數(shù)組。這里的區(qū)別在于編輯一個(gè)現(xiàn)有的數(shù)組和創(chuàng)建一個(gè)新的數(shù)組之間的區(qū)別。

    ? 同樣的,對(duì)于對(duì)象類型的數(shù)據(jù)也是:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-502373.html

    // ? 不建議
    function handleChangeEmail(nextEmail) {
      user.email = nextEmail;
      setUser(user);
    }
    
    // ? 推薦
    function handleChangeEmail(email) {
      const nextUser = { ...user, email: nextEmail };
      setUser(nextUser);
    }
    

到了這里,關(guān)于React突變狀態(tài),更新數(shù)據(jù)(對(duì)象或者數(shù)組),頁(yè)面數(shù)據(jù)不刷新的問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • React 18 state 狀態(tài)更新函數(shù)

    參考文章 設(shè)置組件 state 會(huì)把一次重新渲染加入隊(duì)列。但有時(shí)可能會(huì)希望在下次渲染加入隊(duì)列之前對(duì) state 的值執(zhí)行多次操作。為此,了解 React 如何批量更新 state 會(huì)很有幫助。 在下面的示例中,可能會(huì)認(rèn)為點(diǎn)擊 “+3” 按鈕會(huì)使計(jì)數(shù)器遞增三次,因?yàn)樗{(diào)用了 setNumber(number +

    2024年02月13日
    瀏覽(23)
  • 解決刷新或者重新點(diǎn)擊導(dǎo)航欄,對(duì)應(yīng)的側(cè)邊欄選中狀態(tài)丟失或TAB頁(yè)面與選中狀態(tài)不符合

    ?一:解決刷新時(shí),側(cè)邊欄選中狀態(tài)丟失或者選中狀態(tài)與TAB頁(yè)面不符合。 select 菜單激活回調(diào) index: 選中菜單項(xiàng)的 index, indexPath: 選中菜單項(xiàng)的 index path default-active 當(dāng)前激活菜單的 index string — — 1.給菜單綁定一個(gè)屬性為activeMenu 2.在data中定義一個(gè)activeMenu的初始值為第一個(gè)選項(xiàng)或

    2024年02月12日
    瀏覽(20)
  • React中使用react-router-cache-route緩存頁(yè)面狀態(tài)

    在開(kāi)發(fā)中,從A頁(yè)面跳轉(zhuǎn)到other頁(yè)面,再返回A頁(yè)面時(shí)react-router會(huì)直接刷新頁(yè)面,導(dǎo)致A頁(yè)面中已加載的海量數(shù)據(jù)狀態(tài)丟失,需要重新加載,用戶體驗(yàn)不佳,所以必須將海量數(shù)據(jù)狀態(tài)進(jìn)行緩存。 (在小編的實(shí)際場(chǎng)景中,A頁(yè)面是一堆模型業(yè)務(wù)數(shù)據(jù)標(biāo)注點(diǎn),由于模型永遠(yuǎn)不會(huì)更改,但

    2023年04月13日
    瀏覽(24)
  • react 實(shí)現(xiàn)頁(yè)面狀態(tài)緩存(keep-alive)

    react 實(shí)現(xiàn)頁(yè)面狀態(tài)緩存(keep-alive)

    因?yàn)?react、vue都是單頁(yè)面應(yīng)用,路由跳轉(zhuǎn)時(shí),就會(huì)銷毀上一個(gè)頁(yè)面的組件。但是有些項(xiàng)目不想被銷毀,想保存狀態(tài)。 比如:h5項(xiàng)目跳轉(zhuǎn)其他頁(yè)面返回時(shí),頁(yè)面狀態(tài)不丟失。設(shè)想一個(gè) 頁(yè)面我滑倒了中間,然后跳轉(zhuǎn)到 詳情頁(yè)然后 返回,之前的頁(yè)面刷新了,回到頂部了肯定不行(

    2024年01月23日
    瀏覽(37)
  • React 18 更新 state 中的數(shù)組

    參考文章 數(shù)組是另外一種可以存儲(chǔ)在 state 中的 JavaScript 對(duì)象,它雖然是可變的,但是卻應(yīng)該被視為不可變。同對(duì)象一樣,當(dāng)想要更新存儲(chǔ)于 state 中的數(shù)組時(shí),需要?jiǎng)?chuàng)建一個(gè)新的數(shù)組(或者創(chuàng)建一份已有數(shù)組的拷貝值),并使用新數(shù)組設(shè)置 state。 在 JavaScript 中,數(shù)組只是另一

    2024年02月12日
    瀏覽(41)
  • React 18 更新 state 中的對(duì)象

    參考文章 state 中可以保存任意類型的 JavaScript 值,包括對(duì)象。但是,不應(yīng)該直接修改存放在 React state 中的對(duì)象。相反,當(dāng)想要更新一個(gè)對(duì)象時(shí),需要?jiǎng)?chuàng)建一個(gè)新的對(duì)象(或者將其拷貝一份),然后將 state 更新為此對(duì)象。 可以在 state 中存放任意類型的 JavaScript 值。 在 state

    2024年02月13日
    瀏覽(15)
  • React 狀態(tài)管理:安全高效地修改對(duì)象屬性的 3 種方法

    在 React 應(yīng)用程序中,狀態(tài)(state)是驅(qū)動(dòng)整個(gè)應(yīng)用程序的核心。當(dāng)應(yīng)用程序的狀態(tài)發(fā)生變化時(shí),React 會(huì)自動(dòng)重新渲染相應(yīng)的組件,以確保用戶界面的更新。 與數(shù)組狀態(tài)一樣,對(duì)象狀態(tài)在 React 中也需要特別處理。直接修改對(duì)象屬性是不被允許的,因?yàn)?React 的不可變性原則要求我們創(chuàng)建一

    2024年04月10日
    瀏覽(43)
  • MongoDB 更新文檔(更新數(shù)組對(duì)象中的元素)

    之前我們介紹了如何更新文檔,并簡(jiǎn)單的介紹了更新文檔時(shí)可以使用選項(xiàng)進(jìn)行指定當(dāng)更新內(nèi)容不存在時(shí),可以進(jìn)行新增文檔。具體可以參考: MongoDB 更新文檔(更新一條文檔) https://blog.csdn.net/m1729339749/article/details/129983304 最近遇到了一個(gè)需求,文檔中包含了一個(gè)數(shù)組對(duì)象, 需要

    2024年02月13日
    瀏覽(18)
  • 微信小程序 - 最新超詳細(xì) watch 偵聽(tīng)器功能,支持監(jiān)聽(tīng)對(duì)象、數(shù)組及各種復(fù)雜對(duì)象數(shù)據(jù),可在任意頁(yè)面或組件中使用(絕非網(wǎng)上千篇一律的 “setWatcher“ 不能監(jiān)聽(tīng)對(duì)象的垃圾方法,方案開(kāi)箱即用)

    網(wǎng)上的教程全都是一摸一樣的 setWatcher(this) 方案,重要的是這種方案不能監(jiān)聽(tīng)對(duì)象,可以說(shuō)一無(wú)是處。 本文 在微信小程序中實(shí)現(xiàn) watch 監(jiān)聽(tīng)器監(jiān)聽(tīng)數(shù)據(jù)的功能,讓小程序擁有 watch 監(jiān)聽(tīng)對(duì)象、數(shù)組等復(fù)雜數(shù)據(jù)變化的能力, 您按照教程幾分鐘就能搞定,保證 100% 好用且使用方法

    2024年02月11日
    瀏覽(89)
  • 【狀態(tài)估計(jì)】基于UKF、AUKF的電力系統(tǒng)負(fù)荷存在突變時(shí)的三相狀態(tài)估計(jì)研究(Matlab代碼實(shí)現(xiàn))

    【狀態(tài)估計(jì)】基于UKF、AUKF的電力系統(tǒng)負(fù)荷存在突變時(shí)的三相狀態(tài)估計(jì)研究(Matlab代碼實(shí)現(xiàn))

    ????????? 歡迎來(lái)到本博客 ???????? ??博主優(yōu)勢(shì): ?????? 博客內(nèi)容盡量做到思維縝密,邏輯清晰,為了方便讀者。 ?? 座右銘: 行百里者,半于九十。 ?????? 本文目錄如下: ?????? 目錄 ??1 概述 ??2 運(yùn)行結(jié)果 ??3?參考文獻(xiàn) ??4 Matlab代碼及數(shù)據(jù) 基于

    2024年02月14日
    瀏覽(88)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包