繁体   English   中英

通过其 ID react.js 从数组中删除一个 object

[英]Removing one object from an array by its id, react.js

好的,所以基本上我正在尝试通过其 ID 从数组中删除一个 object。

肉上下文.js

import React, { useReducer, useState } from "react";

const MeatContext = React.createContext({ meatState: [] });

export function MeatContextProvider(props) {
  const meatReducer = (state, action) => {
    if (action.type === "ADD_MEAT") {
      return [...state, action.payload];
    }
    if (action.type === "REMOVE_MEAT") {
      for (var i = 0; i < state.length; i++) {
        if (state[i].id == action.payload) {
          console.log(state[i].id);

          state.splice(i, 1);
          break;
        }
        console.log(state);
        console.log(action.payload);
        return state;
      }
    }
    return [];
  };

  const [meatState, dispatchMeatState] = useReducer(meatReducer, []);
  const [showModal, setShowModal] = useState(false);

  if (showModal) {
    document.body.style.overflow = "hidden";
  }

  return (
    <MeatContext.Provider
      value={{
        meatState: meatState,
        dispatchMeatState: dispatchMeatState,
        showModal: showModal,
        setShowModal: setShowModal,
      }}
    >
      {props.children}
    </MeatContext.Provider>
  );
}
export default MeatContext;

目标是通过操作“REMOVE_MEAT”删除 object,但不知何故,条件 if (state[i].id == action.payload) 显然从未满足,因此 object 永远不会被删除。 console.log(state) 打印

[
    {
        "name": "Sushi",
        "description": "Finest fish and veggies",
        "price": 22.99,
        "id": "m1"
    },
    {
        "name": "Sushi",
        "description": "Finest fish and veggies",
        "price": 22.99,
        "id": "m1"
    }
]

例如(点击删除后)

和 console.log(action.payload) 打印

{
    "id": "m1"
} 

然后应该满足条件,但永远不会运行 console.log(state[i].id) 也不会运行条件体的 rest。 任何想法?

您的条件是state[i].id == action.payload ,其中state[i].id始终是一个string ,而action.payload始终是一个 object 形状像

{
    id: string
}

条件始终为假,因为没有字符串严格等于 object。 您需要编写state[i].id == action.payload.id来比较 ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM