gpt4 book ai didi

node.js - React-Router Router.HistoryLocation 刷新页面

转载 作者:搜寻专家 更新时间:2023-10-31 22:52:19 24 4
gpt4 key购买 nike

我正在研究 React-Express-Node 应用程序并专注于 SPA。我正在使用 react 路由器。

我的 server.js 文件看起来像这样(只有路由部分):

app.use(function(req, res, next) {

Router.run(routes,function(Handler, state) {
var ele = React.createElement(Handler);
res.render(path.join(__dirname + '/public/index'), {html: html});
});

next();

});

路由文件中有这段代码(粘贴主要部分):

module.exports = (
<Route name="app" path="/" handler={Main}>
<Route name="about" path="about" handler={About}/>
<Route name="about/id" path="about/:id" handler={About}/>
<DefaultRoute name="default" handler={Home} />
</Route>
);

client.js 看起来像这样:

Router.run(routes, function(Root,state){
React.render(<Root />,document.getElementById('app'));
});

此设置工作正常,没有任何问题。

现在,我想使用 History API pushstate,这样我就可以拥有更好的 url 并摆脱 #。为此,我在 client.js 中添加了 Router.HistoryLocation 作为第二个参数,它起作用了,它删除了 # 并提供了干净的 url。但是,我的页面刷新了我不想要的。

我已经全面搜索并找到了几个解决方案,但它们要么使用 Flux 要么使用自定义路由器。我肯定遗漏了与状态相关但无法弄清楚的东西。有人能指出我正确的方向吗?

最佳答案

完全可以使用Router.HistoryLocation使用快速服务器呈现 SPA 应用程序(我现在正在做)。

您需要告诉 server.js 文件从哪里获取历史记录,即 req.url ...像这样。

Router.run(routes, req.url, function(Handler, state) {
var ele = React.createElement(Handler);
res.render(path.join(__dirname + '/public/index'), {html: html});
});

如果服务器设置正确,下一个要检查的项目是如何转换到路由。使用传统 anchor <a/>标签将始终刷新页面。 React Router 已经提供了自己的<Link/>允许您导航到您的路线而不会导致页面重新加载的组件。您还可以考虑调用 transitionTo()直接在您的路由器上进行导航。

此外,当一个 <Link/>标签是事件的,它还会将一个事件类传递给标签,以便 css 可以相应地设置它的样式。

链接

<Link to="route" props={} query={}>My Link</Link>

导航

router.transitionTo('route', params, query);

查看 Link DocsNavigation Docs .

关于node.js - React-Router Router.HistoryLocation 刷新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32353899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com