Правильно ли организовал стор в react redux (оч лекго просто я туплю)
import orderBy from 'lodash/orderBy';
import uniqBy from 'lodash/uniqBy';
const initialState = {
news:[],
filteredNews:[],
isLoading:true,
inputValue:""
};
export default (state = initialState, action) => {
switch (action.type) {
вот тут я получаю данный с сервера и засовываю их в
store.news, но для фильтрации я создал еще один массив, чтобы проходиться по нему и выводить отфильтрованные данные, получается у меня лежит два огромных массива один из которых является просто звеном
case "SET_POSTS":
return {
...state,
news: action.payload,
filteredNews: action.payload,
isLoading:false,
};
case "SEARCH_BY_INPUT_VALUE":
return {
...state,
inputValue: action.payload,
тут перебираю массив
filteredNews:state.news.filter(
o => o.title.toLowerCase().indexOf(action.payload.toLowerCase()) >= 0
)
};
Ответы (1 шт):
Автор решения: an_parubets
→ Ссылка
Ну вообще filteredNews не стоит хранить в store. Используй просто селектор, который будет возвращать отфильтрованный массив. Так же не совсем понятно зачем хранить в сторе inputValue. Пусть это будет на уровне компонента.
import orderBy from 'lodash/orderBy';
import uniqBy from 'lodash/uniqBy';
const initialState = {
news:[],
isLoading:true,
};
export default (state = initialState, action) => {
switch (action.type) {
case "SET_POSTS":
return {
...state,
news: action.payload,
filteredNews: action.payload,
isLoading:false,
};
default: return state;
}
}
export const getFilteredNews = (state, inputValue) => {
return state.news.filter(
o => o.title.toLowerCase().indexOf(inputValue.toLowerCase()) >= 0
)
}