У меня есть приложение Reaction-Redux, которое является модальным. И мне нужно переключить его извне. Мое первоначальное приложение выглядело так:
import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import { applyMiddleware, compose, createStore } from 'redux';
import { Provider } from 'react-redux';
import thunk from 'redux-thunk';
import App from './lib/containers/App';
import reducer from './lib/ducks/reducers';
import MY_PROPTYPES from './lib/proptypes';
/* eslint-disable no-underscore-dangle */
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
|| compose;
/* eslint-enable */
const middleware = [];
middleware.push(thunk);
if (process.env.NODE_ENV !== 'production') {
// eslint-disable-next-line global-require
const { createLogger } = require('redux-logger');
middleware.push(createLogger());
}
export default class Gallery extends PureComponent {
render() {
const initState = {
...
};
const store = createStore(
reducer,
initState,
composeEnhancers(applyMiddleware(...middleware))
return (
<Provider store={store}>
<App
onClose={e => onClose(e)}
isVisible={isVisible}
initialPosition={initialPosition}
/>
</Provider>
);
}
}
Это вызывало у меня проблемы, когда я закрывал модальное окно и открывал его. Прекращает рендеринг, хотя магазин меняется. Поэтому сохраняйте изменения соответствующим образом, но мое приложение не реагирует на эти изменения.
Я узнал, что это потому, что я создаю другой экземпляр своего магазина и снова передаю его в свое приложение, но он все еще подключен к предыдущему магазину.
Итак, я изменил свою точку входа:
Я добавил конструктор с хранением в состоянии и изменил создание хранилища на этот код:
let newStore = store;
if (!newStore) {
newStore = createStore(
reducer,
initState,
composeEnhancers(applyMiddleware(...middleware))
);
this.setState({ store: newStore });
}
И этот новый магазин я передаю своему провайдеру. Это решило мою проблему, и приложение меняется в зависимости от магазина, но теперь у меня есть эта ошибка JS:
Предупреждение: невозможно обновить во время существующего перехода состояния (например,
в пределах render
). Методы рендеринга должны быть чистой функцией реквизита
и гос.
Мой пакет.json:
{
"name": "@fishingbooker/gallery",
"version": "1.0.0",
"description": "",
"main": "./dist",
"directories": {
"doc": "docs"
},
"scripts": {
"lib": "babel src -d dist",
"lib:watch": "babel src -w -d dist",
"docs": "webpack-dev-server --open",
"start": "webpack-dev-server --open --mode development --host 0.0.0.0 --disable-host-check --https",
"docs:prof": "webpack -p"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/cli": "^7.1.2",
"@babel/core": "^7.1.2",
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/plugin-proposal-class-properties": "^7.2.3",
"@babel/preset-env": "^7.0.0",
"@babel/preset-react": "^7.0.0",
"@babel/register": "^7.0.0",
"babel-core": "^7.0.0-bridge.0",
"babel-loader": "^8.0.4",
"html-webpack-plugin": "^3.2.0",
"webpack": "^4.20.2",
"webpack-cli": "^3.1.2",
"webpack-dev-server": "^3.1.9"
},
"dependencies": {
"@fishingbooker/react-slick": "0.0.5",
"axios": "^0.18.0",
"classnames": "^2.2.6",
"lodash": "^4.17.11",
"mousetrap": "^1.6.2",
"prop-types": "^15.6.2",
"react": "^16.5.2",
"react-dom": "^16.5.2",
"react-redux": "^6.0.0",
"react-swipe": "^6.0.3",
"redux": "^4.0.1",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.3.0"
}
}
Кто-нибудь знает, как я могу исправить эту ошибку, или как перерисовать мою точку входа, чтобы мое приложение оставалось подключенным к хранилищу.
Заранее спасибо.