javascript - REDUX:如何从我的数组中删除相关项目?
问题描述
我正在使用 Redux 在 React 中开发一个项目。我正在尝试删除一个项目。但是,它向我的数组添加了一个数组。我怎样才能删除它?这是我的代码:
import ActionTypes from "../constants/ActionTypes";
const initialState = {
myCities: [],
aCity: {},
getCityById: {},
};
export const WeatherReducer = (state = initialState, { type, payload }) => {
switch (type) {
case ActionTypes.GETBY_CITYNAME:
return {
...state,
aCity: payload,
myCities: [...state.myCities, payload],
};
case ActionTypes.GETCITYBYID:
return {
...state,
getCityById: payload,
myCities: [], //first I tried to it empty, not works at all and I also tried without it
myCities: [
...state.myCities,
initialState.myCities.filter((item) => item.id !== payload.id), //Then I tried to find related item, choose it and add all objects to my array without related item
],
};
default:
return state;
}
};
我还添加了我的删除内容:
const HandleDelete = (cityId) => {
dispatch(GetCityById(cityId, apiKEY));
};
谢谢你的努力
解决方案
该.filter()
方法已经返回了一个新数组,所以这里不需要将它放在另一个数组中
myCities: [
...state.myCities,
initialState.myCities.filter((item) => item.id !== payload.id)
],
上面创建了一个新数组[]
,然后使用扩展语法 ( )state.myCities
将所有元素放入该新数组中。然后,它添加一个新元素,即过滤后的数组。相反,作为返回一个仅包含您的回调返回的项目的数组,您可以直接使用该数组作为新值...
initialState.myCities.filter()
.filter()
true
myCities:
myCities: initialState.myCities.filter((item) => item.id !== payload.id)
推荐阅读
- vue.js - 如何在 Nuxt.js 中禁用特定路由的延迟加载
- python - 使用从一个函数到另一个函数的值而不在 python 中返回
- ios - iOS:是否可以在没有声音的情况下向通知中心发送推送?
- java - JAVA VAADIN7 如何防止在某些操作之前关闭窗口,如何让窗口在顶部?
- java - 获取通过反射返回 ArrayList<> 的方法的返回类型
- docker - 同一主机的容器不能互相访问
- r - 如何在R中制作对数分布箱?
- django - 哪种视频格式最适合所有类型的浏览器?
- if-statement - 需要帮助让我的“播放”按钮将用户发送到当前级别
- node.js - 如何在 Node.js 中膨胀和解码 XML?