Ответ 1
Всегда помните, что государство является вашим "источником правды". Будьте осторожны с устранением состояния на основе временного фильтра. Как только вы это сделаете, эти предметы исчезли. (Единственный способ вернуть их назад - сбросить ваше состояние в initialState, что может быть не идеальным.)
Лучший подход - сохранить список товаров как есть и просто сохранить текст поиска.
const initialState = {
searchText: '',
items: [ 'hello', 'wahhh', 'yo' ]
};
export default function searchSimple(state = initialState, action) {
switch (action.type) {
case SEARCH_TEXT:
return Object.assign({}, state, {
searchText: action.text
});
}
}
Хотя ваше состояние не будет содержать отфильтрованный список, он расскажет вам все, что вам нужно знать, чтобы построить отфильтрованный список.
Предполагая, что вы используете React, ваш "умный компонент" может быть настроен с помощью следующей функции mapStateToProps()
:
function mapStateToProps(state) {
const { items, searchText } = state.searchSimple;
return {
filteredItems: items.filter((item) => item.startsWith(searchText))
};
}
Если вам нужен этот отфильтрованный список более чем в одном месте, рассмотрите возможность создания функции "селектор", как показано в примере с корзиной Redux. https://github.com/reactjs/redux/blob/master/examples/shopping-cart/src/reducers/cart.js
Это будет выглядеть примерно так:
export function filteredItems(state) {
const { items, searchText } = state.searchSimple;
return items.filter((item) => item.startsWith(searchText));
}
Для более продвинутого подхода к селекторам, проверьте библиотеку перевыбора.