하나의 애플리케이션에선 단 한개의 스토어를 만들어 사용한다. 여러개의 스토어를 사용하는 것은 사실 가능하기는 하나, 권장되지 않는다.
특정 업데이트가 너무 빈번하게 일어나거나, 애플리케이션의 특정 부분을 완전히 분리시키게 될 때, 여러개의 스토어를 만들 수도 있다. 하지만 그렇게 하면 개발 도구를 활용하지 못하게 된다.
리액트에서 state 를 업데이트 해야 할 때, setState 를 사용하고 배열을 업데이트 해야 할 때는 배열 자체에 push 를 직접 하지 않고, concat 과 같은 함수를 사용하여 기존의 배열은 수정하지 않고 새로운 배열을 만들어서 교체하는 방식으로 업데이트를 한다. 깊은 구조로 되어 있는 객체를 업데이트 할 때도 마찬가지로, 기존의 객체는 건드리지 않고, Object.assign
을 사용하거나 spread 연산자(...
) 를 사용하여 업데이트 한다.
리덕스에서도 마찬가지이다. 기존의 상태는 건들이지 않고 새로운 상태를 생성하여 업데이트 해주는 방식으로 해주면, 나중에 개발자 도구를 통해 뒤로 돌릴 수도 있고 다시 앞으로 돌릴 수도 있다.
다음을 기억하자
위 사항을 준수하자. 동일한 인풋이라면 언제나 동일한 아웃풋이여야 한다.
하지만 일부 로직에서는 실행 할 때마다 다른 결과값이 나타날 수 있다. new Date() 를 사용한다던지, 랜덤 숫자를 생성한다던지, 혹은 네트워크에 요청을 한다던지. 이러한 작업들은 결코 순수하지 않은 작업이므로, 리듀서 함수의 바깥에서 처리해줘야 한다. 그런 것을 하기 위해 "리덕스 미들웨어"를 사용한다.