리덕스의 3가지 규칙
1. 하나의 애플리케이션 안에는 하나의 스토어만 존재
하나의 애플리케이션에서는 단 한개의 스토어를 만들어서 사용 합니다.
- 여러 개의 스토어를 사용하는 것은 가능하기는 하나, 권장하지 않습니다.
- 특정 업데이트가 너무 빈번하게 일어나거나, 애플리케이션의 특정 부분을 완전히 분리 시킬 때 여러 개의 스토어를 만들 수도 있습니다.
- 하지만 그렇게 되면, 개발 도구를 활용 하지 못하게 됩니다.
2. 상태는 읽기전용 입니다.
리액트에서 state 를 업데이트 해야 할 때
- setState 를 사용하고
- 배열을 업데이트 할 때는 배열 자체에 push 를 직접 하지 않고, concat 같은 함수를 사용하여 기존의 배열은 수정하지 않고, 새로운 배열을 만들어서 교체하는 방식으로 업데이트 합니다.
- 객체의 경우 기존의 객체는 건들이지 않고 깊은 복사를 하여, spread 연산자 등을 사용하여 업데이트 합니다.
리덕스 또한 기존의 상태는 건들이지 않고, 새로운 상태를 생성하여 업데이트 해주는 방식으로 해야 나중에 개발자 도구를 사용해서 뒤로 돌릴 수도 있고, 다시 앞으로 돌릴 수도 있습니다.
즉, 기존의 상태를 수정하지 않고 새로운 상태를 생성하여 업데이트 해야 합니다. (교체의 개념)
- 이를 통해 불변성 을 유지 할 수 있습니다.
-> 데이터의 변경을 감지 하기 위해서는 내부 데이터까지 전부 찾아야 하는데 시간이 너무 오래 걸립니다.
-> 따라서, 기존 상태의 객체를 새로운 객체로 변경하면 객체의 주소가 다르므로 변경을 쉽게 감지하는 것이 가능 합니다.
3. 리듀서는 순수한 함수여야 합니다.
- 리듀서 함수는 이전 상태와 액션 객체를 파라미터로 받습니다.
- 이전의 상태는 절대로 건들이지 않고, 변화를 일으킨 새로운 상태 객체를 만들어서 반환 합니다.
- 똑같은 파라미터로 호출된 리듀서 함수는 언제나 똑같은 결과 값을 반환해야만 합니다.
참고