Я пытаюсь заставить работать избыточность в моем приложении, и у меня возникают проблемы с передачей изменений состояния подключенным компонентам.Функция mapStateToProps
вызывается только при инициализации и никогда больше.
Я прочитал страницу Устранение неполадок и бесчисленное количество сообщений на форумах и github.Я на 100% уверен, что я не мутирующий штат.Я применил промежуточное программное обеспечение, которое сравнивает состояние до и после отправки действия, чтобы помочь убедиться, что по крайней мере есть новая ссылка.
Вот базовое промежуточное программное обеспечение для обеспечения того, что при отправке действия создается новая ссылка на хранилище
//Store Maker code to apply middleware
const logger = (store) => (next) => (action) => {
var old_state = store.getState()
var result = next(action)
var new_state = store.getState()
console.log("ENSURE FALSE", new_state === old_state)
return result
}
export default () => {
return applyMiddleware(logger)(createStore)(reducers)
}
Вот снимок того, где я создаю хранилище и отдаю его дочернему компоненту
//Parent Component code
const store = StoreMaker()
const unsubscribe = store.subscribe(() => {
console.log("State Changed", store.getState())
})
...
class Plugin extends React.Component{
...
render(){
return (
<Provider store={store}>
<ChildComponent {...this.props} />
</Provider>
)
}
}
Вот самый простой и бессмысленный редуктор, который я просто использую, пытаясь получить этона работу
//Reducer code
export default (state={}, action) => {
if(action.type === "init"){
return {
...state,
test: 1
}
}
else{
return {
...state,
test: 2
}
}
}
И, наконец, вот дочерний компонент
//Child Component code
class ChildComponent extends React.Component{
constructor(props){
super(props)
}
...
render(){
return (
this.props.test
)
}
}
const mapStateToProps = (state) => {
console.log("Mapping state to props")
return state
}
export default connect(mapStateToProps)(ChildComponent)
Насколько я понимаю, функция connect
изact-redux подписывается на хранилище и обновляет подключенный компонентреквизит, когда есть изменение через mapStateToProps
.Однако, когда в моем магазине происходит изменение состояния, mapStateToProps
не вызывается, и реквизиты подключенного компонента не меняются.Но подписка, которую я вручную закодировал в родительском компоненте только для регистрации состояния, сработала, что приводит меня в замешательство относительно того, почему mapStateToProps не был вызван.
Я не могу понять, что происходит, и яЗеркально отражаю рабочие примеры почти одинаково.Было бы замечательно, если бы я мог получить некоторую помощь.
Даже просто идея о том, как выполнить отладку, была бы очень признательна.Я пытаюсь использовать Chrome Dev Tools, чтобы установить точку останова в коде реагирования-избыточности, который подписывается на изменения состояния и вызывает mapStateToProps
, но у меня возникают проблемы с пониманием того, что происходит в исходном коде.Я пытаюсь определить, где мой код не может сообщить об изменении состояния подключенному компоненту.