2016-09-28 2 views
1

페이지로드시 처음에 표시 할 JSON 데이터의 양이 많고 (특정 작업 만 수행 할 수 있도록) 특정 양을 표시하도록 데이터를 필터링하는 옵션이 있다고 가정 해 보겠습니다. 내 FILTER_DATA 액션이 전달되면 view 속성을 확인하고 도우미 함수를 실행하여 데이터 배열을 필터링하지만 필요한만큼 표시합니다.Redux : 감속기에서 데이터를 필터링하고 초기 데이터 상태로 되감니까?

그러나 필터링 된 데이터 버전으로 상태를 업데이트하고 사용자가 원래보기 (전체 데이터 세트)로 돌아가고 싶다고 가정하면 상태를 되감기위한 방법이 있습니까? 그 시점까지? 다시 한 번 데이터를 가져 오기 위해 GET 요청을 다시 수행하기 위해 FETCH_DATA 작업을 다시 보냈지 만 불쾌한 것처럼 보입니다. 생각?

참고 : 아래는 내 감속기입니다 data 초기 상태 (Initial) 개체에 대한 것은 FETCH_DATA_SUCCESS 파견 될 때까지 빈 배열 값이며, GET 요청에서 가져온 JSON 데이터에 state.data을 설정합니다.

const app = (state = initialState, action) => { 
    switch(action.type) { 
    case FETCH_DATA: 
     return { ...state, error: '', loading: true }; 
    case FETCH_DATA_SUCCESS: 
     return { ...state, error: '', loading: false, data: action.data, view: 'all' }; 
    case FETCH_DATA_FAILURE: 
     return { ...state, error: action.error, loading: false }; 
    case FILTER_DATA: 
     let data; 
     if (action.view === 'week') { 
     data = groupData(getLastWeek(state.data), action.view); 
     } else if (action.view === 'month') { 
     data = groupData(getLastMonth(state.data), action.view); 
     } else if (action.view === 'all') { 
     data = state.data; 
     } 
     return { ...state, error: '', loading: false, data: data, view: view }; 
    } 
    return state; 
} 

감사합니다.

답변

3

두 가지 주요 옵션이 있습니다. 첫째, 실제로 "필터링 된"데이터를 사용자 상태로 직접 유지하려면 "원본"버전과 "필터링 된"버전의 두 가지 복사본을 저장할 수 있습니다.

내가 권장하는 다른 방법은 원본 데이터와 필터링 조건을 모두 상태로 유지하는 것이지만 실제로는 원래 데이터를 수정하지 않는 것입니다. 대신 필요에 따라 저장소 외부에서 필터링을 유도하십시오. 이것은 "선택기 함수"를 사용하는 좋은 사례입니다. 몇 가지 예는 http://redux.js.org/docs/recipes/ComputingDerivedData.html을 참조하십시오.

관련 문제