Tengo un reductor de pedidos, que tiene muchos estados.
const initialState = { channel: null, order: {}, fetching:true, menu: [], categories: [], subcategories: [], currentCategoryId: 1, currentSubcategoryId: 5, currentMenu: [], }; Lo que quiero filtrar es menu . menu es una matriz de estado que tiene objetos de menu_item . Tengo currentCategoryId y currentSubcategoryId . Lo que quiero hacer con estos estados es usar currentCategoryId y currentSubcategoryId para filtrar el menu y colocar estados filtrados en currentMenu .
case Constants.ORDER_CHANNEL_CONNECTED: return {...state,currentMenu: action.menu.map((menu) => { if(state.currentCategoryId == menu.category_id){ return menu; } else return false;}}Entonces, para hacer eso, hice un código como el anterior. Aunque devuelve algún valor filtrado, muestra el mismo número de matrices con muchos valores falsos. Quiero encontrar otros enfoques para hacer eso ...
¿Cómo puedo hacer esto?
Gracias por adelantado.
Utilice la función de filter :
{...state,currentMenu: action.menu.filter((menu) => state.currentCategoryId == menu.category_id)}PD: estoy de acuerdo con la respuesta a continuación, es mejor usar Immutable.js
Diría que puede usar immutable.js para este propósito. Puede agregar filter a su mapa.
Puedes intentar algo como
Immutable.map(state.menu).filter(state.currentCategoryId===menu.category_id)PD: no he probado el código anterior, pero debería funcionar con pequeñas modificaciones.
Puedes ver más sobre inmutable aquí
onTodoClick(id){ this.setState({items: this.state.items.filter(item => item.news_id == id ) }); }