亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

調度新的 redux 操作時如何正確刪除對象子字段?

調度新的 redux 操作時如何正確刪除對象子字段?

慕斯王 2023-07-29 16:04:17
我想知道刪除 redux 操作中的嵌套字段的正確方法是什么。例如,我有這樣的代碼:const SUBSCRIBE = 'SUBSCRIBE';const UNSUBSCRIBE = 'UNSUBSCRIBE';export default function reducer(state = {}, action) {  const {    productName,    products,    componentName  } = action;  switch (action.type) {    case UNSUBSCRIBE: {      if (state[productName]?.[componentName]) {        const newState = { ...state };        delete newState[productName][componentName];        return newState;      } else {        return state;      }    }    default:      return state;  }}export function unsubscribe(productName, componentName) {  return {    type: UNSUBSCRIBE,    productName,    componentName  };}在UNSUBSCRIBE操作中,我刪除了newState[productName][componentName]字段,但這也將刪除“舊”狀態的字段。因此,從理論上講,如果有其他操作使用該字段,則它們可能會丟失,因為狀態已發生突變。我應該將舊狀態深度復制到newState然后刪除嗎newState[productName][componentName]?
查看完整描述

1 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

您可以執行以下兩項操作之一:


創建狀態的副本并從該副本中productName刪除componentName

if (state[productName]?.[componentName]) {

  const newProductState = { ...state[productName] };

  delete newProductState[componentName];

  return {

    ...state,

    [productName]: newProductState

  };

} else {

  return state;

}

您可以將其標記為未定義,而不是刪除componentName(我個人更喜歡這樣做)

if (state[productName]?.[componentName]) {

  return {

    ...state,

    [productName]: {

      ...state[productName],

      [componentName]: undefined,

    },

  };

} else {

  return state;

}


查看完整回答
反對 回復 2023-07-29
  • 1 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號