javascript - TS错误: Type 'unknown' is not assignable to type 'FunctionComponent<any> due to withRouter

标签 javascript reactjs typescript ecmascript-6 react-router

我收到此错误

client:159 [at-loader] ./src/App.tsx:40:46 TS2322: Type 'unknown' is not assignable to type 'FunctionComponent | ComponentClass | ComponentClass, any> | FunctionComponent> | undefined'. Type 'unknown' is not assignable to type 'FunctionComponent>'.

在此组件上:

import React, { FC, useState } from 'react';
import { Provider } from 'react-redux';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import User from './scenes/user/User';

const store = configureStore();

type IsOpen = boolean;

const App: FC = () => {
  const [sidebarOpen, setSidebarOpen] = useState<IsOpen>(false);

  return (
    <Provider store={store}>
      <BrowserRouter>
        <Sidebar
          open={sidebarOpen}
          sidebar={<PrimaryNav closeNav={() => setSidebarOpen(false)} />}
          onSetOpen={setSidebarOpen}
          styles={{ sidebar: { background: 'black' } }}>
          <Header sidebarOpen={sidebarOpen} onSetSidebarOpen={setSidebarOpen} />
          <Switch>
            <Route exact={true} path='/' component={NewsArticles} />
            <Route exact={true} path='/user' component={User} />
            <Route path='/user/:id' component={User} />
          </Switch>
        </Sidebar>
      </BrowserRouter>
    </Provider>
  );
};

export default App;

就这两行

            <Route exact={true} path='/user' component={User} />
            <Route path='/user/:id' component={User} />

这是用户组件:

import React, { FC, useEffect } from 'react';

import { withRouter } from 'react-router-dom';

type Props = {
  match: any;
  history: any;
  location: any;
  withRouter: any;
  fetchUsers?: any;
  users?: UserInfoModel[];
};

const mapState = (state: UsersAppState, props: Props) => {
  return {
    users: state.usersReducers.users,
    ...props
  };
};

const actionCreators = {
  fetchUsers
};

const User: FC<Props> = props => {
  const { history, users, location, match, fetchUsers } = props;

  const setID = match.params.hasOwnProperty('id') ? match.params.id : 'AbedA';

  const handleFetch = () => {
    return fetchUsers(setID);
  };

  useEffect(() => {
    if (!users || !users.length) {
      handleFetch();
    }
  }, []);

  useEffect(() => {
    handleFetch();
  }, [location.pathname, match.params.id]);

  return (
    <UserContainer history={history} fetchUsers={() => fetchUsers(setID)} users={users} profilePicture={profileImg} />
  );
};

export default compose(
  connect(
    mapState,
    actionCreators
  ),
  withRouter
)(User);

我提出的关于 react-router/react-router-dom 的每件事都带有错误。

如果我删除 withRouter 错误就会消失。

我做错了什么?

最佳答案

您可以这样解决错误:

export default compose<React.ComponentType<Props>>(
  connect(
    mapState,
    actionCreators
  ),
  withRouter
)(User);

关于javascript - TS错误: Type 'unknown' is not assignable to type 'FunctionComponent<any> due to withRouter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57172382/

相关文章:

javascript - ReactJS路由器不渲染组件

javascript - TinyMCE.dom.Event.add 的最佳替代品是什么?

javascript - 通过 React 状态管理多个表单输入及其值(value)

Angular 6 在路线更改之间显示微调器

node.js - Express 无法在 NodeJS 应用程序中使用 Typescript

javascript - 如何检查对象中是否存在数字数组

javascript - 当在列旁边添加新元素时,是否可以使列内没有宽度的可滚动 div 保持与列相​​同的宽度?

javascript - React 路由器服务器端无法正常工作

reactjs - 使用传递的值测试组件方法的返回值

typescript - 要求参数是 typescript 中给定类的(子)类的实例