createProvider не экспортируется из реагирует на редукцию?
Я пытаюсь создать несколько разных хранилищ Redux, для этого я использую метод createProvider()
в "response-redux".
Я установил последнюю версию response-redux (7.1.0), но получаю сообщение об ошибке типа "createProvider не экспортируется из response-redux". Когда я прошел через узлы модулей, я не смог найти createProvider
внутри источника реакции-редукса. Это проблема версии или я что-то упустил в коде. Я поделился с вами следующим фрагментом кода:
Provider.js
import { createProvider } from "react-redux";
export const STORE_KEY = "myComponentStore";
export const Provider = createProvider(STORE_KEY);
TestComponent.js
import React, { Component } from "react";
import { createStore } from "redux";
import Mycomponent from "./MyComponent";
import { Provider } from "./Provider";
const reducer = {};
const initialState = {
title: "multiple store"
};
const store = createStore(reducer, initialState);
class TestComponent extends Component {
render() {
return (
<Provider store={store}>
<Mycomponent />
</Provider>
);
}
}
export default TestComponent;
Mycomponent.js
import React, { Component } from "react";
import { connect } from "./Connect";
class MyComponent extends Component {
render() {
return <div>{this.props.title}</div>;
}
}
export default connect(function mapStateToProps(state) {
return {
title: state.title
};
})(MyComponent);
Ответы
Ответ 2
В документации сказано
Не создавайте более одного магазина в приложении! Вместо этого используйте зернокомбайн для создания единственного корневого редуктора из многих.
Таким образом, один провайдер, один магазин и несколько редукторов - это правильный (рекомендуемый) способ использования избыточности. Создайте одного глобального провайдера для своего приложения и определите редукторы для этого провайдера. Вы можете использовать селекторы данных для ваших компонентов.
Для этой информации, вероятно, команда разработчиков решила createProvider
функциональности createProvider
.
Ответ 3
Я пытаюсь создать несколько разных магазинов Redux
Хорошо иметь несколько разных хранилищ Redux в одном приложении React. Только не используйте createProvider()
для этого. Два подхода к созданию нескольких независимых хранилищ Redux:
- Используйте Redux подпрограммы:
SubApp5.js
----------
const store = createStore(reducer)
return {
<>
<Provider store={store}>
<MyTable />
</Provider>
</>
}
При таком подходе несколько магазинов Redux будут сосуществовать.
- Используйте несколько SPA внутри одного приложения React - см. crisp-реагировать. При таком подходе несколько хранилищ Redux не будут сосуществовать.
Когда вы создаете crisp-реагировать, оно создает приложение React с 2 SPA, и вы можете добавить Redux к каждому SPA. Затем вы можете переключиться с одного SPA (и его хранилища Redux) на другой SPA и его хранилище.
Ответ 4
Ваш магазин может выглядеть примерно так:
// store.js
import { createStore } from 'redux';
import rootReducer from './root-reducer';
export default createStore(rootReducer);
И что "rootReducer" представляет собой комбинацию разных файлов редуктора:
//root-reducer.js
import SomeReducers from './reducers/some-reducers';
import AnotherOne from './reducers/another-one';
const rootReducer = combineReducers({
SomeReducers,
AnotherOne,
})
export default rootReducer;
Тогда ваш магазин используется в index
// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from "react-redux";
import store from "./storage/store";
import App from './App';
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>
, document.getElementById('root')
);
Но это все еще только один store