使用本地承诺来响应路由器4异步getInitialProps

时间:2019-05-14 22:24:25

标签: javascript reactjs promise es6-promise react-router-v4

我正在使用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,但是由于我最终将使用该模式,所以我想现在模拟一下承诺。我该怎么做?

0 个答案:

没有答案