第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

React useState 鉤子影響狀態(tài)中使用的默認(rèn)變量,無(wú)論擴(kuò)展運(yùn)算符

React useState 鉤子影響狀態(tài)中使用的默認(rèn)變量,無(wú)論擴(kuò)展運(yùn)算符

翻閱古今 2023-11-02 21:23:10
我是經(jīng)驗(yàn)豐富的 js/React 開(kāi)發(fā)人員,但遇到了我無(wú)法解決的情況,而且我不知道如何修復(fù)它。我有一個(gè)具有許多不同狀態(tài)的上下文提供程序,但一種狀態(tài)如下所示:const defaultParams = {  ordering: 'price_asc',  page: 1,  perPage: 15,  attrs: {},}const InnerPageContext = createContext()export const InnerPageContextProvider = ({ children }) => {  const [params, setParams] = useState({ ...defaultParams })  const clearParams = () => {    setParams({...defaultParams})  }  console.log(defaultParams)  return (    <InnerPageContext.Provider      value={{        params: params,        setParam: setParam,        clearParams:clearParams      }}    >      {children}    </InnerPageContext.Provider>  )}我在頁(yè)面上有一個(gè)按鈕,它調(diào)用clearParams函數(shù),并且應(yīng)該將參數(shù)重置為默認(rèn)值。但它不起作用即使當(dāng)我console.log(defaultParams)在每個(gè)提供者重新渲染時(shí),defaultParams當(dāng)狀態(tài)改變時(shí)變量似乎也在改變我認(rèn)為這不正常,因?yàn)槲乙呀?jīng)使用過(guò){...defaultParams},它應(yīng)該創(chuàng)建新變量,然后將其傳遞給useState鉤子。我努力了:const [params, setParams] = useState(Object.assign({}, defaultParams))const clearParams = () => {  setParams(Object.assign({}, defaultParams))}const [params, setParams] = useState(defaultParams)const clearParams = () => {  setParams(defaultParams)}const [params, setParams] = useState(defaultParams)const clearParams = () => {  setParams({    ordering: 'price_asc',    page: 1,    perPage: 15,    attrs: {},  })}除了第三種方法之外,上述方法都不起作用,我將相同的對(duì)象硬編碼為defaultParams. 這個(gè)想法是將 dafult 參數(shù)保存在某處,當(dāng)用戶清除參數(shù)時(shí)恢復(fù)它。你們有什么想法可以做到這一點(diǎn)嗎?編輯: 這就是我更新參數(shù)的方式:const setParam = (key, value, type = null) => {    setParams(old => {      if (type) {        old[type][key] = value      } else old[key] = value      console.log('Params', old)      return { ...old }    })  }
查看完整描述

1 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

請(qǐng)說(shuō)明您如何更新“params”。


如果代碼“params.attrs.test = true”中有類(lèi)似的內(nèi)容,那么defaultParams將被更改


如果old[type]不是簡(jiǎn)單類(lèi)型,它會(huì)在 defaultParams 中存儲(chǔ)對(duì)同一對(duì)象的引用。defaultParams.attrs === params.attrs。因?yàn)樵诔跏蓟陂g您解構(gòu)了一個(gè)對(duì)象,但沒(méi)有解構(gòu)其嵌套對(duì)象。


問(wèn)題就在這里:old[type][key] = value


解決方案:


const setParam = (key, value, type = null) => {

    setParams(old => {

      if (type) {

        old[type] = {

          ...old[type],

          key: value,

        }

      } else old[key] = value

      return { ...old }

    })

  }


查看完整回答
反對(duì) 回復(fù) 2023-11-02
  • 1 回答
  • 0 關(guān)注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)