2017-12-29 32 views
0

Todo에서 React-Redux를 사용하여 작업을 선택할 수 있기를 원합니다. 어디에서이 상태를 저장해야합니까?목록의 선택된 항목을 Redux에 저장하는 패턴

첫 번째 해결 방법 : 작업에

둘째 솔루션을 isActive: true attribut 추가 : 방금 선택한 항목의 ID를 처리하기 위해 새로운 감속기를 만듭니다.

나는 두 가지 해결책을 싫어한다. 첫 번째 문제는 그와 관련이없는 무언가를 저장하고있는 것처럼 느껴진다. 두 번째 문제는 id를 저장하기 위해 감속기 전체를 ​​만들기에 과도한 느낌이 든다.

다른 옵션이 있습니까? 뭐가 최고야? 감사합니다.

답변

2

사용 사례에 따라 다릅니다. 지속 UI 상태의 톤이 큰 앱

  1. , 그것은 많은 의미가 UI에 관련된 저장소의 조각을 변이 특별한 감속기를 할 수 있습니다.

  2. 여러 작업을 동시에 활성화 할 수있는 경우 작업 당 isActive: boolean 속성이 유효합니다. 태스크 데이터 관점에서 볼 때 태스크와 관련이 없지만 사실은 태스크의 애플리케이션 측면에서 나온 것입니다. 귀하의 redux 저장소의 주요 목표는 API 데이터 모델을 미러링하는 것이 아니라 귀하의 애플리케이션 소스가되는 것입니다.

  3. 단일 작업 만 활성/선택할 수있는 경우 하나의 isActive: id을 가질 수도 있습니다.

  4. 구성 요소 상태를 사용할 수도 있습니다. 이 제한은 지속되지 않으며 공유되지 않는다는 것입니다. 예를 들어, 저장 단추를 원할 경우 해당 단추는 선택된 상태의 구성 요소 내에 있어야합니다.

2

나열한 두 가지 옵션 중 하나가 잘못되었습니다. 그러나, 다른 옵션을 찾고 있다면, 당신은

1

)는 일하러 감속기 상태에서 선택한 항목을 포함 할 수 있으므로 상태 개체는 다음과 같이 보일 것이다 :

{ 
    selected: id, 
    list: [{id, text, completed}, ...] 
} 

2) 돈 당신이 경우 선택한 항목이 앱의 다른 위치에 필요하지 않으면 간단히 해당 지역의 상태로 저장할 수 있습니다. Redux를 응용 프로그램 상태와 로컬 상태로 혼합하는 것은 아무 문제가 없습니다.

+0

감사합니다. 첫 번째 솔루션을 사용하면 ID를 수정하고 나면 새 상태가 변경되지 않도록 보장합니다 (동일한 목록 배열을 참조하지 않습니다) 발견 된 유일한 해결책은 var newState = JSON.parse입니다. (JSON.stringify (state)) newState.selected = action.id – Diogyn

+0

이에 대한 자세한 정보는 https://redux.js.org/docs/recipes/reducers/ImmutableUpdatePatterns.html – Diogyn

+2

에서 확인할 수 있습니다. 솔루션을 사용하려면 선택한 새 항목의 ID로 선택한 값을 변경하면됩니다. 목록의 배열을 변경할 필요가 없습니다. 항목을 추가, 제거 또는 업데이트 할 때 목록에 변경 사항이있는 경우에만 배열을 변경합니다. 이 경우 선택한 항목이 한 번만있는 경우 선택한 항목을 변경해도 항목 데이터 자체에는 아무 것도 변경되지 않습니다. –