가능하긴한데 권장되지는 않는다.
특정 업데이트가 너무 빈번하게 일어나거나 어플리케이션 특정 부분을 완전히 분리시키게 될 때 스토어를 여러개 만들기도 하는데 일반적인 방법이 아니다. 스토어가 여러개되면 개발자도구를 제대로 활용하지도 못한다. 그래서 하나의 어플리케이션에는 하나의 스토어만 만든다는 것!
즉, 불변성을 지켜야 한다는 것이다.
성능을 위해서다. 그래야 컴포넌트들이 제대로 리렌더링된다.
리듀서 함수는 이전 상태, 액션 객체를 받아온다. 이전의 상태는 절대로 변경하지 않고, 변화를 일으킨 새로운 상태 객체를 만들어서 반환해야 한다. 이 얘기도 마찬가지로 불변성을 유지해야 한다는 말이다.
순수 함수의 규칙에 따라 똑같은 파라미터로 호출된 함수는 언제나 똑같은 결과값을 반환해야 한다. 즉, 리듀서 함수내에서 new Date(), Math.random(), axios.get() 이런걸 쓰면 안된다는 얘기다. 호출할 때마다 다른값이 나올 수 있는 것들은 안된다!
리듀서 밖에 있는 어떤 변수에 의존하는 것도 당연히 안된다. 상수라면 언제나 같으니까 상관없다.
이런 axios나 random이나 이런 것들은 컴포넌트단에서 해주거나 미들웨어에서 할 수 있다. 미들웨어는 곧 배워 볼 것.