Я пишу независимый модал с использованием React и Redux. Я перехожу из моей переменной окружения, если видна модальная и начальная позиция, а остальная часть состояния в хранилище избыточности.
Я пытался использовать методы жизненного цикла реагирования для принудительного обновления моего приложения, но, похоже, ничего не работает.
Вот как я подключаю свое приложение к магазину:
render () {
const {
media, initPosition, isMobile, title, isVisible, onClose
} = this.props;
const photos = media.filter(
item => typeof item.video === 'undefined'
);
const videos = media.filter(
item => typeof item.video !== 'undefined'
);
const initState = {
media: {
items: media,
filteredItems: {
all: media,
photos,
videos
},
filter: 'all',
initPosition,
currentPosition: initPosition
},
gallery: {
isMobile,
title
}
};
const store = createStore(
reducer,
initState,
composeEnhancers(applyMiddleware(...middleware))
);
return (
<Provider store={store}>
<App onClose={e => onClose(e)} isVisible={isVisible} />
</Provider>
);
Я называю мой модал так:
<Gallery
media={videos.concat(photos)}
isMobile={isMobile}
isVisible={show}
onClose={() => this.setState({ show: false })}
initPosition={position}
changePosition={position => this.setState({ position })}
title="Maximus"/>
И вот как я подключаю его к состоянию:
function mapStateToProps(state) {
const { media, gallery } = state;
const {
filteredItems, filter, currentPosition, initPosition
} = media;
const { isMobile, title } = gallery;
return {
filteredMedia: filteredItems,
filter,
currentPosition,
initPosition,
isMobile,
title
};
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({
changeMediaProp
}, dispatch);
}
export default connect(mapStateToProps, mapDispatchToProps)(
GalleryApp
);
После того, как isVisible изменен, кажется, что ничего не работает с избыточным хранилищем. Он меняется, но приложение не обновляется.
Когда я переключаю модальный режим (change isVisible prop), состояние приращения постоянно меняется, но мое приложение не перерисовывается.
Итак, подведем итог. Я изменяю isVisible и initPosition из окруженного приложения (эти реквизиты не сохраняются в хранилище), и когда я их меняю, мой компонент не может реагировать на изменения из хранилища редуктора.