react-router2.0如果关闭了页面路由就失效了

发布于 2022-09-02 14:19:57 字数 1160 浏览 20 评论 0

比如这样一个路由
/articles/6
如果是在页面上点击一个链接,是能正常访问的,
但是如果在浏览器上点击刷新或者输入地址,就马上出现
Cannot GET /articles/6
这样的话,用react做的网站不就没办法提供收藏功能了吗?
这样的话用户体验反而更差了吧?
还是说我哪里没有写对。
下面附上代码

import { Router, Route, browserHistory,IndexRoute } from 'react-router';


//... 省略了一些组件


class Routers extends Component {

    constructor(props) {
        super(props);
    }


    render () {
        return (
            <Router history={browserHistory}>
                <Route path="/" component = {App}>
                    <IndexRoute component = {Article}/>
                    <Route path="articles" component = {Article}>
                        <Route path = ":id" component = {ArticleDetail}/>
                    </Route>
                    <Route path="*" component = {NoMatch}/>
                </Route>
            </Router>
        );
    }
}

React.render (
    <Routers/>,
    document.body
);

然后Link那边是这样写的

<Link to = {"/articles/"+row.id}>{row.name}</Link>

我的想法是能够像正常web应用那样,路由可以标识唯一资源。
有没有办法实现?
还是说要退回老版本?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

望喜 2022-09-09 14:19:57

原因是服务端路由的处理,服务端需要对react-router里列出的路由返回那个默认的html文件。

可以判断只要不是请求静态资源文件,都返回这个静态html,然后不存在的页面也用react显示404页面,当然这样并不好,但影响不大,配置简单。

避免上面问题的方式是服务端渲染。

楼上用hash方式也可以解决,但seo有影响,开发阶段可以这样干。

末蓝 2022-09-09 14:19:57

输链接的时候要这样输

www.demo.com/#/articles/6

不是这样输

www.demo.com/articles/6
送舟行 2022-09-09 14:19:57

http://nphard.me/2016/03/07/nginx-for-react/
也遇到类似问题,不知道对你有没有帮助

☆獨立☆ 2022-09-09 14:19:57

服务器部署是用node还是nignx,如果是node则需要匹配任意路由到index.html,如果nignx则用配置默认index

鹤仙姿 2022-09-09 14:19:57
webpack-dev-server --history-api-fallback
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文