我想从data
中删除一个实体(这是对象someData
中的List)。我在我的reducer中使用fromJS
不变js来保持状态不变
我尝试使用updateIn, deleteIn, update, removeIn
以及在immutable-js上可以找到的任何东西。但这对我没有用。我很可能是错误地使用了这些功能。
import { fromJS, updateIn } from 'immutable';
import * as type from './constants';
export const initialState = fromJS({
someData: [],
loading: true,
});
function someReducer(state = initialState, action) {
switch (action.type) {
case type.DELETE_SINGLE_ENTITY:
updateIn(state, ['someData', 'data'], val =>
val.filter(x => x.id !== action.id),
);
return state;
default:
return state;
}
}
export default someReducer;
//example someData
/*
{
date: "",
data: [
{
"id": "1",
"machine_type": "xyz",
"created_time": "2019-06-18T10:36:60Z",
...
},
{
"id": "22",
"machine_type": "abc",
"created_time": "2019-06-20T10:36:60Z",
...
},
{
"id": "2",
"machine_type": "kjhkh",
"created_time": "2019-06-11T12:36:60Z",
...
}
]
}
*/
我想删除与操作中传递的ID相匹配的实体。
在上面的示例中,删除state.get('someData')
的输出之前。当我键入action.id
时,我的预期输出(当state.get
为2时)应为:
{
date: "",
data: [
{
"id": "1",
"machine_type": "xyz",
"created_time": "2019-06-18T10:36:60Z",
...
},
{
"id": "22",
"machine_type": "abc",
"created_time": "2019-06-20T10:36:60Z",
...
}
]
}
答案 0 :(得分:1)
最后!得到它了! 这个:
item dt_op DQN_Pred DQN_Inv
0 product_1 2019-01-08 6.0 7.0
1 product_2 2019-02-08 NaN NaN
2 product_1 2019-01-08 2.0 2.0
代替此:
return updateIn(state, ['someData', 'data'], val =>
val.filter(x => x.id !== action.id),
);
以前,我认为updateIn会更新状态本身,但不会返回更新的对象。因此,只返回updateIn就可以了。
答案 1 :(得分:0)
您可以使用过滤器功能
const sampleData = [{id: 1},{id: 2},{id: 3}]
const idToRemove = 2;
const updatedData = sampleData.filter(el => {
return el.id !== idToRemove
})
console.log(updatedData);