将变量从反应路由器传递到子组件
Passing variable from react-router to child components
如何将变量从服务器端的 react-router 传递给子组件。我想将一些变量传递给由 RoutingContext 渲染的组件
import { renderToString } from 'react-dom/server'
import { match, RouterContext } from 'react-router'
import routes from './routes'
serve((req, res) => {
match({ routes, location: req.url }, (error, redirectLocation, renderProps) => {
if (error) {
res.status(500).send(error.message)
} else if (redirectLocation) {
res.redirect(302, redirectLocation.pathname + redirectLocation.search)
} else if (renderProps) {
res.status(200).send(renderToString(<RouterContext {...renderProps} />))
} else {
res.status(404).send('Not found')
}
})
})
尝试添加自定义道具来渲染道具时遇到同样的问题。
我发现这个链接非常有用:
https://github.com/reactjs/react-router/issues/2073
注意:请参阅最后的评论
如果我理解您在评论中的意思 - 您需要一种将服务器数据传递给客户端组件的方法。
我倾向于使用 EJS(或您在 express 中使用的任何模板语言(将其渲染出来,将 JSON 字符串分配给 HTML 中的脚本标记并将其分配给窗口范围。
所以你的index.ejs文件看起来包含类似的东西
<body>
<main>
<%- markup %>
</main>
<script>
window.data = JSON.parse('<%- data %>');
</script>
</body>
然后在你的服务器js中
var customProps = {}; // the data you are passing in
var markup = renderToString(...); // your renderToString stuff you did before
var data = {
markup: markup,
data: JSON.stringify(customProps)
};
res.status(200).render(index.ejs', data);
然后在您的顶级路线中,您可以参考window.data
*
- 注意:您需要添加一些条件才能知道您使用的是浏览器还是服务器,我使用 https://www.npmjs.com/package/is-browser
相关文章:
- 如何在react路由器的组件中使用参数
- 制作一个高阶组件,用TypeScript实现反应中继和反应路由器的交互操作
- 使用react路由器隐藏组件
- 如何在使用ui路由器时构造angular.js应用程序组件
- Angular 2:在另一个组件上定义一个路由器,而不是引导的
- 当登录状态为组件状态时,如何使用react路由器实现依赖登录的路径
- Emberjs-如何在组件方法中获取当前路由器路径
- 反应路由器 - 将方法传递给子组件
- 反应路由器提供给“路由”的无效道具“组件”
- 将变量从反应路由器传递到子组件
- 如何将自定义组件与反应路由器路由转换一起使用
- 如何在反应路由器中将子路由定义为反应组件
- angular2新路由器不会在页面加载时同时加载2个组件(头和内容)
- 如何使用react路由器将顶级组件状态传递给Routes
- 将路由器代码添加到组件时分析错误?(v2.0.0-beta.0)
- 如何使用react路由器处理带有lazyloaded组件的面包屑
- 如何使用ui路由器在组件驱动架构中定义控制器
- 角度组件路由器从URL中删除#
- 将组件路由器与升级适配器配合使用
- Angular2 v3组件路由器:TypeError: Cannot read property 'split&