나는 우리가 감속기에서 불변의 상태를 유지해야하는 이유를 궁금해. 이것이 필수인가 아니면 단순히 권장되는 접근인가? redux가 최적화를 수행하기 위해 변경할 수없는 것을 이용합니까?redux에서, 우리는 왜 감속기에서 상태를 불변으로 유지해야합니까?
몇 가지 실험 후, 나는 REDUX이 불변 일의 사용을 않는 것을 발견했습니다. 그 이유 중 하나는 감속기에서 주에 대해 동일한 참조를 반환 할 때 상태가 변경된 경우에도 UI가 업데이트되지 않아야한다는 것입니다. 아래의 예에서와 같이 :
const reducer = (state = [], action) => {
\t switch(action.type) {
\t \t case 'BRING_UP_NEXT_IMAGE':
\t \t \t \t state.push(state.shift());
\t \t \t \t break;
\t \t default:
\t \t \t return state;
\t }
\t return state;
};
돌아 오는이 (가 가치가 무엇인지에 대해) 동일한 상태의 참조를 감지하기 때문에 UI가 업데이트되지 않습니다.
이
우리가 UI를 업데이트 할 경우 우리가 국가에 새 참조를 반환해야 할 필요성을 설명합니다. 그러나 왜 Redux는 내부 상태 구조가 변경 불가능해야한다고 요구합니까? 내가 볼 수 있듯이 UI가 업데이트되는지 여부는 상태 참조 자체가 변경되었는지 여부에 따라 다릅니다. 나는 내부 구조를 변이하더라도 응용 프로그램에서와 같이,뿐만 아니라 정상적으로 작동합니다 는const reducer = (state = [], action) => {
\t switch(action.type) {
\t \t case 'BRING_UP_NEXT_IMAGE':
\t \t \t \t state = state.concat(state.shift());
\t \t \t \t break;
\t \t default:
\t \t \t return state;
\t }
\t return state;
};
예, 이후 ") (state.shift"와 이전 상태를 변이, 그러나 않습니다 state.concat은 배열에 대한 새로운 참조를 반환합니다. 상태 자체는 다른 참조이며 앱은 정상적으로 작동합니다.
요컨대, 내가 알고 싶은 것은 국가가 엄격하게 불변으로 유지되어야하는지 여부는 Redux 기능을 올바르게 만들기위한 필요성이거나 shouldComponentUpdate에서 얕은 비교를 사용하여 앱이 더 나은 성능을 얻을 수 있도록 권장되는 옵션입니다. 화해 과정을 건너 뛸 수 있습니까?