在服务器端访问react-router参数呈现初始数据检索

时间:2016-11-06 02:18:21

标签: express reactjs redux react-router universal

我觉得我错过了一些非常明显的东西。 FWIW,我在服务器端使用React,Redux,React-Router,React-Router-Redux绑定和Express。

我正在研究我的第一个通用反应应用程序,而且大部分工作都很有效。我有一个动作," fetchData"在服务器上运行并在最初呈现页面之前解析一个promise,然后客户端检查它是否需要获取数据。

所有这一切都正如我所愿。

但是,当我需要在呈现页面之前访问服务器上路由器中的参数时,我遇到了一些麻烦。

一个例子是:

http://myapp.com/update/:updateid

如何在初始fetchData操作中正确访问updateid参数?我已经使用上下文对象在客户端成功完成了 - 但我对这里的位置感到有点困惑。

我可以在renderProps中看到它传递给我的RouterContext,我只是不知道如何抓住它。我是使用React-Router还是在express中做某事?

(我设法通过以下代码暂时解决它,但我知道这真的很糟糕,因此我想要正确地做到这一点)

// Grab the requested user from the router / url
const pathname = state.getIn(['routing', 'locationBeforeTransitions', 'pathname']);

// Strip out /update/ from the route string
const updatePath = '/update/';
let pathnameWithoutTrailing = pathname;
if (pathname.endsWith('/') || pathname.endsWith('#') || pathname.endsWith('?')) {
  pathnameWithoutTrailing = pathname.slice(0, -1);
}
requestedUpdate = pathnameWithoutTrailing.substr(updatePath.length);

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题。您可以使用this.props.params.updateId访问容器中的updateId。您需要将updateId作为参数传递给fetchData操作。像这样:

componentWillMount() {
    this.props.dispatch(fetchData(this.props.params.updateId))
}