2017-10-31 1 views
0

redux 저장소를 업데이트하려고하지만 지점과 sessionId에 모두 액세스하려고하면 다시 정의되지 않습니다. 내 감속기에 문제가 있다는 것이 확실하지만, 알아낼 수는 없습니다. 어떤 도움이라도 대단히 감사 할 것입니다.Redux 저장소 업데이트

import { UPDATE_POINTS, SET_SESSION } from '../path' 

const initialState = { 
    sessionId: null, 
    points: [] 
} 

export default (state = initialState, action) => { 
    switch (action.type) { 
     case UPDATE_POINTS: 
      return { 
       points: action.points 
      } 
     case SET_SESSION: 
      return { 
       sessionId: action.session 
      } 
     default: 
      return state; 
    } 
} 

편집 :

액션 크리에이터

export function updatePoints(points){ 
    return { 
     type: UPDATE_POINTS, 
     points 
    } 
} 

export function setSession(session){ 
    return { 
     type: SET_SESSION, 
     session 
    } 
} 

내 반작용 (I는이 기능에서 다른 대부분의 모든 것을했다 단순화를 위해) 구성 요소

다음

내 감속기
handleSelect(e) { 
    this.props.setSession(e); 
    console.log(this.props.sessionId); 
} 

이 기능은 메뉴 항목이 드롭 다운 메뉴에서 선택 될 때 사용됩니다. 첫 번째 선택에서 콘솔에는 sessionId의 초기 상태에있는 것이 표시됩니다. 더 이상의 드롭 다운 선택은 콘솔에서 정의되지 않습니다.

답변

0

아주 가까이 있습니다. redux의 reducer는 전체 상태의 새 복사본 을 반환해야합니다. 귀하의 감속기는 다른 열쇠를 떨어 뜨릴 염려가있는 열쇠만을 돌려주고 있습니다. 키를 업데이트 한 상태로 새 주 복사본을 반환해야합니다. 예를 들어 당신이 data 키에 페이로드를 넣으면

const initialState = { 
    sessionId: null, 
    points: [] 
} 

export default (state = initialState, action = null) => { 
    // Exit early if you don't have an action (returning old state) 
    if (!action) return state; 

    // This function will assign your patch onto the old state, and then 
    // assign all of that onto a NEW object. For redux to do it's job, 
    // you can't modulate the old object, you have to return a new one. 
    const update = patch => Object.assign({}, state, patch); 

    switch (action.type) { 
    case UPDATE_POINTS: 
     return update({ 
     points: action.points 
     }); 

    case SET_SESSION: 
     return update({ 
     sessionId: action.session 
     }); 

    default: 
     return state; 
    } 
} 

을 그리고 기록을 위해, 대신 액션 제작자에 고유 키마다에서 데이터 페이로드를 넣는, 당신의 행동은 표준 플럭스 조치를 따를 것 체재.

export const updatePoints = (points) => ({ 
    type: UPDATE_POINTS, 
    data: points 
}); 

export const setSession = (session) => ({ 
    type: SET_SESSION, 
    data: session 
}); 

여기 있습니다. 행운을 빌어 라. 그러면 문제가 생기면 Redux 문서를 참조하십시오 (정말 좋습니다). Link to Redux Docs

+0

이것은 효과가 있습니다. 고맙습니다! – Wilson