redux 저장소에 animals
이 있다고 가정 해 봅시다. 그것은 정규화 된 객체이고, 키는 id
이고 값은 객체 자체입니다. 각 동물의 열쇠는 is_dog
입니다. 비용이 많이 드는 계산 속성을 잠재적으로 비싸지 않게 재 계산하는 것을 피하는 방법
animals: {
'id1': { location: 'foo', is_dog: true, name: 'Dog1' },
'id2': { location: 'foo', is_dog: false, name: 'Cat1' },
'id3': { location: 'foo', is_dog: false, name: 'Cat2' },
'id4': { location: 'foo', is_dog: true, name: 'Dog2' },
}
내가 접속
DogsList
가게 보이는 상태와 UI 성분
dogIds
의 배열 요소에 전달 반응이있다.
dogIds = _.chain(state.animals).filter('is_dog').map('id').value();
['id1', 'id4']
을 반환이 위의 예에서 : dogIds
의 계산은 같은 것입니다.
그러나,이 전 동물의 수천 가정하자, 그리고 각 동물은 내가 dogIds
은 어떤 동물을위한 경우 is_dog
변경을 바꿀 것을 알고 등 lastFed
, currentLocation
말을 자주 변경 다른 특성을 가지고,하지만 난 아니에요 모든 동물에 대한 모든 변경에 불필요하게 필터 및 맵 계산을 수행하지 않는 방법을 확실히 알고 있어야합니다. reselect
을 사용해 보았지만이 경우에는 도움이되지 않는다고 생각합니다.
dogIds
을 적절한 것으로 저장하고 관련성이있는 경우에만 수동으로 업데이트하려고합니다. 새 개가 animals
에 추가되거나 고양이가 개로 변경 될 때처럼 (내 유추가 여기에 따라 다릅니다.) 그러나 나는 redux 상점에서 계산 된 속성을 유지함으로써 내가 잘못한 것처럼 느낍니다.
감사합니다. 좋은 의견입니다. 내가 피하려고했던 것은 실제 '필터'계산이지만, 더 많이 생각하면할수록 수백만 마리의 동물을 가지고 있지 않으면 너무 비싸지 않을 것입니다. –
생각해 보면, 나는 당신의 질문을 오해했을 수도 있다고 생각합니다. 동물의 목록이 업데이트 될 때마다 계산을 수행해야합니다. 그렇지 않으면 개가 고양이가되었는지 등을 알 수 없습니다. – rorymorris89
1) 동물 추가/제거 2) 동물 유형 변경 (개에서 고양이로)을 처리하는 경우 'dogsList'를 다시 계산해야 할 때를 알아야합니다 (그러한 행동이 발생하지 않았다면 , 아무 필요도 없다) – rorymorris89