我正在使用after.js / razzle / react-router4,因为我正在构建的react应用最终将包括CMS和服务器端渲染。我在the docs for after.js here中看到,可以在渲染之前使用参数化路由来获取组件的相关数据。
所以我已经正确设置了路由器,以便通过传递的动态ID转到新路由:
{
path: '/onesheet/:id',
component: asyncComponent({
loader: () => import('./pages/OneSheet/OneSheet'), // required
}),
},
在我的OneSheet组件中,添加函数:
static async getInitialProps({ req, res, match }) {
console.log('get initial props');
const id = fetchId(match.params.id);
return { id };
}
,由于直到构建好API之前我都不会调用它,所以我想立即用id(或某个从本地JSON文件通过id获取数据的函数)立即解决异步诺言因此,我尝试了以下方法:
fetchId = (id) => {
console.log(`fetch ${id}`);
return new Promise((resolve, reject)=> {
resolve(id);
});
}
而且我还在我的渲染函数中放置了一个日志:
render(){ console.log(this.props.id)}
检查承诺是否已解决,但我显然做错了什么,因为fetchId和getInitialProps中的日志不会触发,并且this.props.id
在render中未定义。 / p>
我知道我可以从我的this.props.match.params.id
函数中获得componentDidMount
,但是由于我最终将使用该模式,所以我想现在模拟一下承诺。我该怎么做?