После 24 часов POC и отладки выясняется, что мой редуктор не возвращал новый объект, несмотря на использование оператора распространения:
let newState = {...state};
newState.name = ...
Итак, что я читаю из Интернета, и Redux, в частности, устраняет неполадки с документом, так это то, что если состояние изменяется изменчиво, то mapStateToProps не будет вызываться. Это кажется неверным. В моем случае или в любом случае изменения состояния Redux вызывает mapStateToProps. Он просто не будет вызывать shouldComponentUpdate ().
Причина, по которой распространяемый оператор только копирует объект. Таким образом, если в объекте есть вложенные объекты, оператор распространения будет сохранять ссылку на объект и, следовательно, после обновления внутреннего объекта исходное состояние будет изменено. Чтобы избежать таких сценариев, всегда используйте любой инструмент для глубокого копирования объекта.
_.cloneDeep(stateCopy, stateInitial)
работал в моем случае.
Кстати,
console.log(newState === state)
вернул false, что означает, что состояние не было мутированным, это действительно было клонированное состояние. Очень странно. (
Обновление
Не используйте оператор распространения. Это не делает глубокую копию. Это хорошо только для случаев, когда у государства есть простая пара ключ-значение. Для сложных объектов, вложенных в объекты, оператор распространения будет плохо работать.