【问题标题】:TypeError: Object(...) is not a function Redux StoreTypeError: Object(...) is not a function Redux Store
【发布时间】:2021-02-25 16:18:30
【问题描述】:

我被错误堆积了一段时间,我在网上搜索了我在 Stack Overflow 上找到的所有答案,GitHub 与更新 React 或更正导入拼写有关,我做了所有这些但仍然堆积。

这是我的商店

import { compose, createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import firebase from '../firebase/Firebase';
import { reactReduxFirebase, getFirebase } from 'react-redux-firebase';
import rootReducer from './reducers/rootReducer';

// react-redux-firebase config
const rrfConfig = {
  userProfile: 'users',
  useFirestoreForProfile: true, // Firestore for Profile instead of Realtime DB
  attachAuthIsReady: true, // attaches auth is ready promise to store
};

const store = createStore(
  rootReducer,
  compose(
    reactReduxFirebase(firebase, rrfConfig),
    applyMiddleware(thunk.withExtraArgument({ getFirebase })),
    // for redux dev tools
    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
  )
);

export default store;

这是我的 index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import { BrowserRouter } from 'react-router-dom';
import 'react-toastify/dist/ReactToastify.css';
import { Provider } from 'react-redux';

// store
import store from '../src/redux/store';

ReactDOM.render(
  // <React.StrictMode>
  <Provider store={store}>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </Provider>,
  // </React.StrictMode>,
  document.getElementById('root')
);
serviceWorker.unregister();

【问题讨论】:

    标签: reactjs redux react-redux redux-thunk react-redux-firebase


    【解决方案1】:

    经过大量研究,我找到了解决此问题的方法。 问题出在 react-redux-firebase 包上,他们改变了初始化包的方式,这是新的代码结构。

    商店:

     import { compose, createStore, applyMiddleware } from 'redux';
    import thunk from 'redux-thunk';
    import firebase from '../firebase/Firebase';
    import {  getFirebase } from 'react-redux-firebase';
    import rootReducer from './reducers/rootReducer';
    
    // react-redux-firebase config
    const rrfConfig = {
      userProfile: 'users',
      useFirestoreForProfile: true, // Firestore for Profile instead of Realtime DB
      attachAuthIsReady: true, // attaches auth is ready promise to store
    };
    const store = createStore(
      rootReducer,
      compose(
        applyMiddleware(thunk.withExtraArgument({ getFirebase })),
        window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
      )
    );
    const rrfProps = {
      firebase: firebase,
      config: rrfConfig,
      dispatch: store.dispatch,
      // createFirestoreInstance // <- needed if using firestore
    };
    
    export { store, rrfProps };
    

    索引 js

    import React from 'react';
    import ReactDOM from 'react-dom';
    import './index.css';
    import App from './App';
    import * as serviceWorker from './serviceWorker';
    import { BrowserRouter } from 'react-router-dom';
    import 'react-toastify/dist/ReactToastify.css';
    import { Provider } from 'react-redux';
    import { ReactReduxFirebaseProvider } from 'react-redux-firebase';
    
    // store
    import { store, rrfProps } from '../src/redux/store';
    
    ReactDOM.render(
      // <React.StrictMode>
      <Provider store={store}>
        <ReactReduxFirebaseProvider {...rrfProps}>
          <BrowserRouter>
            <App />
          </BrowserRouter>
        </ReactReduxFirebaseProvider>
      </Provider>,
      // </React.StrictMode>,
      document.getElementById('root')
    );
    serviceWorker.unregister();
    

    这是我找到解决方案的地方react-redux-firebase

    【讨论】: