2016-08-18 1 views
0

나는 docs에서 todo 예제를 react-redux 형태로 배웠고 reducer이 아닌 actions에 nextTodo의 ID가 저장되는 이유를 알지 못합니다. todos가 추가되면 초과 작업이 변경되므로 상태로 간주해서는 안됩니까? 나에게 액션의 목적은 사용자로부터 일부 입력을 가져 와서 액션으로 변환하는 것이지 상태를 생성하는 것이 아니다. 주 (state)를 만들고 그것에 주어진 행동에 따라 변경하는 것은 감속기의 임무입니다.리듀서에 포함 된 상태 대 리듀서에 포함 된 상태

감속기는 순수 함수가 될 것으로 예상되기 때문이다 액션 코드

let nextTodoId = 0 

export const addTodo = (text) => { 
    return { 
    type: 'ADD_TODO', 
    id: nextTodoId++, 
    text 
    } 
} 

감속기 코드

const todo = (state, action) => { 
    switch (action.type) { 
    case 'ADD_TODO': 
     return { 
     id: action.id, 
     text: action.text, 
     completed: false 
     } 
... 
} 

답변

3

. 즉, 동일한 매개 변수로 여러 번 실행하면 동일한 결과가 반환되고 나머지 응용 프로그램의 상태는 변경되지 않습니다.

그런 이유로 감속기는 ID를 판별 할 수 없으므로 마치 반복 실행이 다른 결과 (즉, 다른 반환 값)를 갖게됩니다.

감속기의 작업은 상태를 작성하지 않는 것입니다. 작업은 기존 상태와 델타 (즉, 액션)를 가져 와서 새 상태를 반환하는 것입니다. 그리고 그렇게 믿을만하게해야합니다.

+0

그래서 액션에서 상태를 만드는 것이 일반적입니다. 나에게 그것이 구성 요소가 컨트롤러의 역할을 돌보는 것처럼 보이고 스토어가 모델이지만 상태 생성이 어디에서 발생하는지 모르겠다 @ madara-uchiha – mangocaptain

+0

컨테이너 구성 요소에서이 논리를 수행하지 않는 것을 어떻게 알 수 있습니까? ? 왜 행동에 그대로 두어야합니까? – mangocaptain

+0

'nextTodoId'가 주에 속해서는 안됩니까? 상태가 모든 응용 프로그램 상태를 포함한다고 가정 할 경우 왜 외부의 변수로 정의되는지 이해할 수 없습니다. 그것은 또한 감속기 기능을 순수하게 유지할 수 있습니다. – lammert

관련 문제