ioof-holdings / redux-dynostore

These libraries provide tools for building dynamic Redux stores.
BSD 3-Clause "New" or "Revised" License
122 stars 15 forks source link

'dynostoreOptions' of undefined #25

Closed emailodroid closed 3 years ago

emailodroid commented 5 years ago

Problem

When i attach new reducer and saga i get Uncaught TypeError: Cannot read property 'dynostoreOptions' of undefined

My store file

import { applyMiddleware, createStore, compose } from 'redux';
import { createLogger } from 'redux-logger';
import createSagaMiddleware from 'redux-saga';
import { createPromise } from 'redux-promise-middleware';
import { composeWithDevTools } from 'redux-devtools-extension';
import { persistStore, persistReducer } from 'redux-persist';
import dynostore, { dynamicReducers } from '@redux-dynostore/core';
import { dynamicSagas } from '@redux-dynostore/redux-saga';
import storage from 'redux-persist/es/storage';
import rootSaga from 'erpcore/sagas/rootSaga';
import combinedReducers from 'erpcore/reducers';

const sagaMiddleware = createSagaMiddleware();
const reducer = persistReducer({ key: 'state', storage, whitelist: [''] }, combinedReducers);

//  Preparing middleware for store
let middleware = null;
if (process.env.REACT_APP_REDUX_DEBUGGER === 'true') {
    middleware = composeWithDevTools(
        applyMiddleware(createPromise(), createLogger(), sagaMiddleware),
        dynostore(dynamicReducers(), dynamicSagas(sagaMiddleware))
    );
} else {
    middleware = compose(applyMiddleware(createPromise(), sagaMiddleware));
}

//  Prepare store for Provider
const store = createStore(reducer, middleware);

//  Mount sagas
sagaMiddleware.run(rootSaga);

//  Prepare persistor for persistStore
const persistor = persistStore(store);

//  Exporting store and persistor for providers in index
export { store, persistor };

My component with reducers and sagas that needs to be injected

import React from 'react';
import dynamic from '@redux-dynostore/react-redux';
import subspaced from '@redux-dynostore/react-redux-subspace';
import { attachReducer } from '@redux-dynostore/redux-subspace';
import runSaga from '@redux-dynostore/redux-subspace-saga';

import createEventWizardReducer from './CreateEventWizard.reducer';
import { createEventWizardSaga } from './CreateEventWizard.saga';

const CreateEventWizard = () => {
    return <h1>CreateEventWizard</h1>;
};

export default dynamic(
    'identifier',
    subspaced(),
    attachReducer(createEventWizardReducer),
    runSaga(createEventWizardSaga)
)(CreateEventWizard);
emailodroid commented 5 years ago

I think that was the problem with react-redux version. after i downgraded it from 6 to 5 that works fine but i got another error: TypeError: Cannot read property 'subspaceOptions' of undefined

Here is my package.json

        "@babel/core": "7.2.2",
        "@redux-dynostore/core": "^2.0.0",
        "@redux-dynostore/react-redux": "^2.0.0",
        "@redux-dynostore/react-redux-subspace": "^2.0.0",
        "@redux-dynostore/redux-saga": "^2.0.0",
        "@redux-dynostore/redux-subspace": "^2.0.0",
        "@redux-dynostore/redux-subspace-saga": "^2.0.0",
        "@svgr/webpack": "4.1.0",
        "apollo-boost": "^0.1.28",
        "babel-core": "7.0.0-bridge.0",
        "babel-eslint": "9.0.0",
        "babel-jest": "23.6.0",
        "babel-loader": "8.0.5",
        "babel-plugin-named-asset-import": "^0.3.1",
        "babel-preset-react-app": "^7.0.1",
        "bfj": "6.1.1",
        "case-sensitive-paths-webpack-plugin": "2.2.0",
        "css-loader": "1.0.0",
        "dotenv": "6.0.0",
        "dotenv-expand": "4.2.0",
        "eslint": "5.12.0",
        "eslint-config-airbnb": "^17.1.0",
        "eslint-config-prettier": "^4.0.0",
        "eslint-config-react-app": "^3.0.7",
        "eslint-import-resolver-alias": "^1.1.2",
        "eslint-loader": "2.1.1",
        "eslint-plugin-flowtype": "2.50.1",
        "eslint-plugin-import": "2.14.0",
        "eslint-plugin-jsx-a11y": "6.1.2",
        "eslint-plugin-prettier": "^3.0.1",
        "eslint-plugin-react": "7.12.4",
        "file-loader": "2.0.0",
        "fork-ts-checker-webpack-plugin-alt": "0.4.14",
        "fs-extra": "7.0.1",
        "graphql": "^14.1.1",
        "graphql-tag": "^2.10.1",
        "html-webpack-plugin": "4.0.0-alpha.2",
        "identity-obj-proxy": "3.0.0",
        "jest": "23.6.0",
        "jest-pnp-resolver": "1.0.2",
        "jest-resolve": "23.6.0",
        "jest-watch-typeahead": "^0.2.1",
        "mini-css-extract-plugin": "0.5.0",
        "node-sass": "^4.11.0",
        "optimize-css-assets-webpack-plugin": "5.0.1",
        "pnp-webpack-plugin": "1.2.1",
        "postcss-flexbugs-fixes": "4.1.0",
        "postcss-loader": "3.0.0",
        "postcss-preset-env": "6.5.0",
        "postcss-safe-parser": "4.0.1",
        "prettier": "1.16.4",
        "prop-types": "^15.7.2",
        "react": "^16.8.1",
        "react-apollo": "^2.4.1",
        "react-app-polyfill": "^0.2.1",
        "react-dev-utils": "^7.0.3",
        "react-dom": "^16.8.1",
        "react-helmet": "^5.2.0",
        "react-loadable": "^5.5.0",
        "react-redux": "5.1.0",
        "react-router-dom": "^4.3.1",
        "redux": "^4.0.1",
        "redux-devtools-extension": "^2.13.8",
        "redux-form": "^8.1.0",
        "redux-logger": "^3.0.6",
        "redux-mock-store": "^1.5.3",
        "redux-persist": "^5.10.0",
        "redux-promise-middleware": "^6.0.1",
        "redux-saga": "^1.0.1",
        "reselect": "^4.0.0",
        "resolve": "1.10.0",
        "sass-loader": "7.1.0",
        "style-loader": "0.23.1",
        "terser-webpack-plugin": "1.2.2",
        "url-loader": "1.1.2",
        "webpack": "4.28.3",
        "webpack-dev-server": "3.1.14",
        "webpack-manifest-plugin": "2.0.4",
        "workbox-webpack-plugin": "3.6.3"
mpeyper commented 5 years ago

Hi @emailodroid,

You're correct about react-redux v6, it is not supported (yet)

I'll take a look at this and see if I can work out what's going wrong. A replication codesandbox (or sandbox of your choice) is really helpful for debugging these kinds of issues.

Can you share the rest of the stack trace as well?

qideng commented 5 years ago

Got the same error of TypeError: Cannot read property 'subspaceOptions' of undefined.

It went away when I use import createSagaMiddleware from 'redux-subspace-saga'; instead of import createSagaMiddleware from 'redux-saga';

My package.json has

...
"react-redux": "^5.1.1",
"redux-subspace": "^2.4.0",
"redux-subspace-saga": "^2.4.0",
... 

And here is the trace:

TypeError: Cannot read property 'subspaceOptions' of undefined
    at eval (/app/node_modules/@redux-dynostore/redux-subspace-saga/node_modules/redux-subspace/es/index.js:383:111)
    at _callee2$ (/app/node_modules/@redux-dynostore/redux-subspace-saga/node_modules/redux-subspace-saga/es/index.js:156:66)
    at tryCatch (/app/node_modules/@redux-dynostore/redux-subspace-saga/node_modules/redux-subspace-saga/node_modules/regenerator-runtime/runtime.js:62:40)
    at Generator.invoke [as _invoke] (/app/node_modules/@redux-dynostore/redux-subspace-saga/node_modules/redux-subspace-saga/node_modules/regenerator-runtime/runtime.js:288:22)
    at Generator.prototype.(anonymous function) [as next] (/app/node_modules/@redux-dynostore/redux-subspace-saga/node_modules/redux-subspace-saga/node_modules/regenerator-runtime/runtime.js:114:21)
    at next (/app/node_modules/redux-saga/es/internal/proc.js:320:27)
    at currCb (/app/node_modules/redux-saga/es/internal/proc.js:397:7)
    at runGetContextEffect (/app/node_modules/redux-saga/es/internal/proc.js:732:5)
    at runEffect (/app/node_modules/redux-saga/es/internal/proc.js:444:1676)
    at next (/app/node_modules/redux-saga/es/internal/proc.js:324:9)
mpeyper commented 3 years ago

Closing. Please see #484 for details.