Приложение рендеринга, вызывающее создание двух экземпляров хранилища - PullRequest
0 голосов
/ 16 января 2019

У меня есть приложение 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"
  }
}

Кто-нибудь знает, как я могу исправить эту ошибку, или как перерисовать мою точку входа, чтобы мое приложение оставалось подключенным к хранилищу.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...