Quiero filtrar algún objeto de la matriz, pero actualmente solo sé eliminar un solo objeto, aquí está mi código actual.

const deleteChatList = (dispatch) => async (id) => {
    dispatch({type: 'delete', payload: id}) // need to change id to list of id or list of object
}

...

const chatListReducer = (state, action) => {
    switch (action.type) {
        case 'fetch':
            return {...state, chatList: action.payload}
        case 'delete':
            return state.filter((chatList) => chatList.id !== action.payload)
        default:
            return state;
    }
}

¿Alguien puede ayudarme?

0
Hanif Nr 29 abr. 2020 a las 10:09

2 respuestas

Para cualquiera que busque una respuesta, esto funciona

case 'delete':
            return {...state, chatList: state.chatList.filter((chat) => !action.payload.includes(chat))}
0
Hanif Nr 30 abr. 2020 a las 04:02

Puede usar Set para verificar la membresía. Los objetos también podrían funcionar.

const deleteChatList = (dispatch) => async (chatListDeleted) => {
    dispatch({type: 'delete', payload: [id1, id2, id3]}) 
}
...

const chatListReducer = (state, action) => {
    switch (action.type) {
        case 'fetch':
            return {...state, chatList: action.payload}
        case 'delete':
            const idSet = new Set(action.ids)
            return state.filter((chatList) => idSet.has(chartList.id))
        default:
            return state;
    }
}
0
gautamits 29 abr. 2020 a las 07:14