Comment appliquer plusieurs filtres à l'aide de Redux Toolkit
P粉600845163
P粉600845163 2024-02-21 17:03:42
0
1
421

J'essaie de filtrer les données par catégories telles que le type, la marque, la couleur, le sexe à l'aide de Redux Toolkit. Les filtres fonctionnent individuellement, mais les filtres ne fonctionnent pas ensemble. Si je filtre d'abord la marque puis la couleur, le filtre de marque ne fonctionne pas. Que dois-je faire pour que cela fonctionne ?

const initialState = {
    products: data,
    filteredItems: data,
}

export const filterSlice = createSlice({
    name: "filter",
    initialState,
    reducers: {
        filterCategory: (state, action) => {
            if (action.payload === "All") {
                return initialState
            } else
            state.filteredItems = state.products.filter(
                (item) => item.category === action.payload
            ) 
        },
        filterGender: (state, action) => {
            state.filteredItems = state.products.filter(
                (item) => item.gender === action.payload
            ) 
        },
        filterColor: (state, action) => {
            state.filteredItems = state.products.filter(
                (item) => item.color === action.payload
            )
        },
        filterBrand: (state, action) => {
            state.filteredItems= state.products.filter(
                (item) => item.brand === action.payload
            )
        },
    }
})

J'ai essayé d'écrire le filtre dans un réducteur mais ça ne marche toujours pas

P粉600845163
P粉600845163

répondre à tous(1)
P粉978742405

Je pourrais faire quelque chose de similaire

const initialState = {
    products: data,
    filteredItems: data,
    filters: {}
}

reducers: {
    filterCategory: (state, action) => {
        if (action.payload === "All") {
            return initialState
        } else {
            state.filters = { ...state.filters, category: action.payload }
            state.filteredItems = state.products;
        ) 
    },
    // ...etc.
    Object.entries(state.filters).forEach(([key, value]) => {
        state.filteredItems = state.filteredItems.filter(
            (item) => item[key] === value
        );
    });
    return state;
}

vous enregistrez donc les filtres actifs, puis définissez filteredItems sur la liste complète des éléments et appliquez chaque filtre individuellement.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal