2017-09-08 10 views
3
comments : { 
    byId : { 
     "comment1" : { 
      id : "comment1", 
      author : "user2", 
      comment : ".....", 
     }, 
     "comment2" : { 
      id : "comment2", 
      author : "user3", 
      comment : ".....", 
     }, 
     "comment3" : { 
      id : "comment3", 
      author : "user3", 
      comment : ".....", 
     }, 
     "comment4" : { 
      id : "comment4", 
      author : "user1", 
      comment : ".....", 
     }, 
     "comment5" : { 
      id : "comment5", 
      author : "user3", 
      comment : ".....", 
     }, 
    }, 
    allIds : ["comment1", "comment2", "comment3", "commment4", "comment5"] 
} 

위의 예에서 포함 할 필요가있는 이유가 있습니까 (api). 나는 당신이 카운트를 더 빠르게 할 수있는 이런 식으로 가정하고, 아마 당신은 정렬 할 수는 있지만, 일반적으로 나는 성능에 문제가 있는지 이해하지 못한다.정규화 된 상태 셰이프에서 모든 ids의 배열이 필요한 이유는 무엇입니까?

+1

이 요구 사항의 출처는 무엇입니까? 확실히 JavaScript 나 React가 아닙니다. 나는 Redux를 말할 수 없다. –

+0

Redux에서 요구하는 것은 아닙니다. – Nit

+2

몇 가지 질문에서 본 적이 있습니다. 분명히 댄 자브라모 (Dan Abramov)는이 자습서에서이 작업을 수행합니다. https://egghead.io/lessons/javascript-redux-normalizing-the-state-shape – jonahe

답변

5

이것은 Redux에서 요구하는 것이 아니며 normalizr입니다. 귀하의 질문에 대답하기 위해, JavaScript 객체 can't be replied upon to retain sort order in certain situations. 배열에 ID를 넣으면 정규화하기 전에 있던 정렬 순서를 유지할 수 있습니다.

Quote from co-maintainer of Redux and author of "normalizing state shape section" of Redux docs

: JS 엔진은 이제 개체의 키에 걸쳐 반복에 대해 상당히 표준화 된 프로세스를하는 동안 ID의 배열로

, 당신은 순서를 정의하는에 의존해서는 안됩니다. ID 배열을 저장하면 항목의 순서를 정의 할 수 있습니다.

+2

* "질문에 대답하기 위해 JavaScript 객체는 속성이 나타납니다. "* 예, ES2015 현재 [여기] (http://www.ecma-international.org/ecma-262/8.0/index.html#sec-ordinaryownpropertykeys) 및 [여기] (http://www.ecma-international.org/ecma-262/8.0/index.html#sec-enumerate-object-properties) 및 Oriol의 설명 [여기] (https://stackoverflow.com/a/30919039/157247)). ES2015에 추가 된 새로운 작업들과'JSON.stringify'가 그 순서를 따른다. 레거시 연산 ('Object.keys','for-in')은 필요하지 않습니다. 하지만 ** JSON **에는 속성 순서가 없습니다. :-) –

+0

normalizr은 2014 년에 만들어졌습니다. React 앱은 IE 9와 같이 오래된 브라우저에서 사용할 수 있습니다. normalizr은 JSON을 반환하지 않으므로 JSON의 속성 순서가 부족하므로 여기서는 열거 할 때 정렬 순서를 준수하지 않아도됩니다. (React 앱에서 매우 흔히 사용되는) 데이터를 덮어 쓰고 라이브러리 작성자는 믿을 수없는 정렬 순서를 자신의 추론으로 명시합니다 (https://stackoverflow.com/questions/42238802/redux-many-to-many). -relationship/42257112? noredirect = 1 # comment71675068_42257112) "유지할 수 없다"로 바꿀 것입니다. –

+0

수정 : Mark가 [Normalizing State Shape] (http://redux.js.org/)를 작성했습니다. docs/recipes/reducers/NormalizingStateShape.html) Redux의 의사이며 Redux의 공동 관리자이며 Daniel Abramov와 함께 Normalizr을 창립했습니다. –