6

刚升级到react-router-dom 4.0.0。我所有的组件都是常规的classes 或胖箭头。它们都是使用导出的export default ThatComponent。然而我得到了这个:

未捕获的错误:元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件),但得到:未定义。您可能忘记从定义组件的文件中导出组件。检查Router.

// minimal showcase
import { BrowserRouter, Match, Miss } from 'react-router';

const Router = () => (
  <BrowserRouter>
    <div>
      {/* both Match and Miss components below cause an error */}
      <Match exactly pattern="/login" component={Login} /> 
      <Match exactly pattern="/frontpage" component={Frontpage} />
      <Match exactly pattern="/logout" render={() => (<div>logout</div>)} />
      <Miss component={NoMatch} />
    </div>
  </BrowserRouter>
);

为什么<Match>组件认为其他组件未定义?

4

2 回答 2

9

在最终版本中react-router没有Match也没有Miss。你只需要使用Route. 此外,您需要安装和导入 react-router-dom包才能使用BrowserRouter(请参阅React Router 文档)。

为了使您的示例以最少的更改工作,您需要执行以下操作:

// minimal showcase
import { BrowserRouter, Route, Switch } from 'react-router-dom';

const Router = () => (
    <BrowserRouter>
        <Switch>
            <Route exact path="/login" component={Login} /> 
            <Route exact path="/frontpage" component={Frontpage} />
            <Route exact path="/logout" render={() => (<div>logout</div>)} />
            <Route component={NoMatch} />
        </Switch>
    </BrowserRouter>
);

请查看React Router 文档中的 NoMatchExample以了解如何以及何时使用Switch

于 2017-03-21T06:16:24.593 回答
1

在这里查看 react-router 的来源:https ://unpkg.com/react-router@4.0.0/index.js (也可以https://unpkg.com/react-router-dom@4.0.0/index.js),它下面没有Match匹配可能属于其他包。

于 2017-03-15T00:16:46.963 回答