无法将 Redux 商店连接到 React Typescript App

Posted

技术标签:

【中文标题】无法将 Redux 商店连接到 React Typescript App【英文标题】:Can't connect Redux store to React Typescript App 【发布时间】:2020-06-09 02:16:44 【问题描述】:

我正在尝试将 Redux Store 连接到我的 TypeScript-React 应用程序,但收到以下错误:

没有重载匹配这个调用。重载 1 of 2, '(props: Readonly>): Provider',给出了 以下错误。类型 '() => any' 缺少以下属性 来自“Store”类型:调度、getState、订阅、 replaceReducer, [Symbol.observable] 重载 2 of 2, '(props: ProviderProps, context?: any): Provider', 给 以下错误。 类型 '() => any' 不可分配给类型 'Store'.ts(2769) index.d.ts(461, 5):预期类型来自 此处在类型“IntrinsicAttributes &”上声明的属性“商店” 内在类属性> & 只读> & 只读<...>' index.d.ts(461, 5):预期类型来自声明的属性“商店” 在这里类型'IntrinsicAttributes& 内在类属性> & 只读> & 只读<...>'

这是我的 index.tsx 组件:

import React from 'react';
import ReactDOM from 'react-dom';
import  Provider  from 'react-redux';
import  ConnectedRouter  from 'connected-react-router';
import  Route, Switch  from 'react-router-dom';
import store from './store/index';

import './styles/index.scss';

import LoginPage from './app/routes/LoginPage';

const App = () => (
  <Provider store=store>
    <Switch>
      <Route path="/" component=LoginPage />
    </Switch>
  </Provider>
);

ReactDOM.render(<App />, document.getElementById('root'));

和我的商店:

store.js

import  createStore  from 'redux';

export default configureStore = () => 
  const store = createStore(countReducer);
  return store;
;

reducer.js

const countReducer = (state = 0, action) => 
  switch (action.type) 
    case 'INCREMENT':
      return state + 1;
    case 'DECREMENT':
      return state - 1;
    default:
      return state;
  
;

我应该在某处指定商店的类型吗?

【问题讨论】:

你从哪里得到这个countReducerstore.js下? 你必须通过createStore()下的reducer或组合reducer,在你的情况下你正在通过它但没有导入它可能是这个问题 【参考方案1】:

您将store 导出为函数,但将其用作变量。不要忘记调用该函数。


    import React from 'react';
    import ReactDOM from 'react-dom';
    import  Provider  from 'react-redux';
    import  ConnectedRouter  from 'connected-react-router';
    import  Route, Switch  from 'react-router-dom';
    import store from './store/index'; // store is a function
    import './styles/index.scss';   
    import LoginPage from './app/routes/LoginPage';

    const App = () => (
      <Provider store=store()> // <- Call the function here
        <Switch>
          <Route path="/" component=LoginPage />
        </Switch>
      </Provider>
    );

    ReactDOM.render(<App />, document.getElementById('root'));

【讨论】:

以上是关于无法将 Redux 商店连接到 React Typescript App的主要内容,如果未能解决你的问题,请参考以下文章

将 React Redux 连接到 Typescript 中的组件

如何将 redux-form 绑定连接到表单的输入

使用 Redux Hooks 而不是 connect() 好的设计吗?

如何将 Redux Devtools 连接到其他人的应用程序

如何使用react-redux将redux商店中封装的ui状态映射到道具?

React 组件不调用 connect redux 函数