首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >键入React Router Router Component?迷惑

键入React Router Router Component?迷惑
EN

Stack Overflow用户
提问于 2017-10-29 09:57:58
回答 3查看 6.1K关注 0票数 10

我没有使用过React Router v4,所以我可能会犯一些新手错误。我的问题是Typescript编译由于我看到的一个错误而中断,我猜可能有一个类在引擎盖下返回,但我看不到?

代码::

代码语言:javascript
复制
import * as React from 'react';
import { Router, RouteComponentProps } from 'react-router-dom';
import HomeRoute from './home';
import PhotosRoute from './photos';
import StoreRoute from './store';
import TourRoute from './tour';
import 'index.css';

interface RouterProps {
  component?: React.SFC<RouteComponentProps<any> | void> | React.ComponentClass<RouteComponentProps<any> | void>;
}

class Navigation extends React.Component<RouterProps, {}> {
  render(): JSX.Element {
    return (
       <Router>
        <div>
          <ul className="nav-styles">
           <li>
               <HomeRoute />
            </li>
            <li>
               <PhotosRoute />
            </li>
            <li>
               <StoreRoute />
            </li>
            <li>
                <TourRoute />
            </li>
          </ul>
        </div>
      </Router>
    );
  }
}

export default Navigation;

错误::

代码语言:javascript
复制
(16,8): error TS2322: Type '{ children: Element; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<Router> & Readonly<{ children?: ReactNode; }> & Re...'.
  Type '{ children: Element; }' is not assignable to type 'Readonly<RouterProps>'.
    Property 'history' is missing in type '{ children: Element; }'.

如果我做错了什么,或者有人希望看到它,这里有一个HomeRoute的例子。然而,我并不认为这是目前的突破性问题。

代码语言:javascript
复制
import * as React from 'react';
import { Route, Link } from 'react-router-dom';
import Home from '../Home/Home';

export default (): JSX.Element => (
  <div>
    <nav>
      <Link to="/">Home</Link>
    </nav>
    <div>
      <Route path="/" component={ Home } />
    </div>
  </div>
);

我知道我需要以某种方式键入这个类,但我一直在尝试,但找不到一个好的引用或如何键入Navigation类。

EN

回答 3

Stack Overflow用户

发布于 2017-10-29 12:08:40

我想您忘记将历史记录添加到<Router />元素中了。

你能不能试试:

代码语言:javascript
复制
import { createBrowserHistory } from 'history';

[...]

const history = createBrowserHistory();

[...]

class Navigation extends React.Component<RouterProps, {}> {
  render(): JSX.Element {
    return (
       <Router history={history}>
        <div>
          <ul className="nav-styles">
          [...]
      </Router>
    );
  }
}
票数 11
EN

Stack Overflow用户

发布于 2020-09-23 21:05:47

在遵循react-router教程时,我也犯了同样的“新手”错误:

代码语言:javascript
复制
import { Router } from 'react-router-dom';

...should应该是:

代码语言:javascript
复制
import { BrowserRouter as Router } from 'react-router-dom';
票数 10
EN

Stack Overflow用户

发布于 2020-01-10 11:01:15

Router是更高层路由器[1]的基本接口。它需要注入历史作为编译的道具。根据您的生产环境,我建议使用BrowserRouterNativeRouter

https://reacttraining.com/react-router/web/api/Router1

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46996186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档