通过 React-router v4 更改组件

Changing a component via React-router v4

大约一个月前我提出了一个类似的问题,这似乎解决了我所有的问题,但是我猜 react-router 版本改变了,现在都扔进了垃圾桶?因为现在 none 有效,而且根据我的研究,代码有一些相当大的变化。

我只想为一个简单的 webapp 做一些简单的路由,使用我之前线程中的相同示例,我目前有这个:

import {
  BrowserRouter as Router,
  Route, IndexRoute, Switch,
  Link
} from 'react-router-dom';
class Page1 extends Component{
  render(){
    return (<div>Page1</div>);
  }
}

class Page2 extends Component{
  render(){
    return (<div>Page222</div>);
  }
}

class Home extends Component {
    render(){
      return(<h1>I AM HOME</h1>);
    }
}
ReactDOM.render(
         <Router>
             <Switch>
             <Route exact path="/" component={Home}/>
            <Route exact path="/page1" component={Page1}/>
            <Route exact path="/page2" component={Page2}/>
             </Switch>
    </Router>,
    document.getElementById('root')
);

不幸的是,即使这样,我仍然无法在不同的组件之间导航并不断收到消息

Cannot GET /page1

我还注意到 this.props.children 似乎不再使用了,或者至少它不像以前那样工作了。

无论如何,我想要的只是能够在页面之间导航并适当地路由它们。我在这里做错了什么?

编辑:我可能还应该提一下,我已经阅读了 React Router 的文档并尝试按照所见 here 进行操作,不幸的是这些路由仍然不起作用。

这看起来像是 express.js 错误,而不是客户端错误。确保您的服务器正在为所有不匹配任何其他内容的网址提供服务 index.html。

每当您说 path=/something 浏览器实际上尝试重定向到路径但失败时,这里有一些事情需要考虑,这是因为 server 无论您使用的是哪个服务器webpack-dev-serverexpress server 未获取文件。 React 基本上用于制作 SPA 单页应用程序,因此在一天结束时您只提供第一页 index.html。因此,当您点击 url 时,您必须告诉服务器要提供什么服务。大多数情况下,您必须再次提供 index.html 或负责您的应用程序的页面。

如何解决:

如果您正在使用 webpack-dev-server 并且您 运行 从与 index.html 相同的目录中安装它,您可以继续并将 --historyApiFallback 标志传递给 webpack 所以像这样:

$ webpack-dev-server --host 0.0.0.0 --historyApiFallback

你会看到它将回退到哪个位置。

更简洁的方法是将 devServer 配置密钥放入 webpack.config.js。这将是这样的:

 devServer: {
    historyApiFallback: {
      index: 'templates/index.html'
    },
  }

这里 index.html 是从 templates 目录提供的,您可以指定页面的路径。

将其放入 webpack.config.js 后,您可以 运行 服务器,您的组件有望呈现。希望对你有帮助。