javascript – React router 4:如何在Route的render方法中等待promise的解析?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – React router 4:如何在Route的render方法中等待promise的解析?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1556字,纯文字阅读大概需要3分钟。
内容图文
我正在尝试实现功能,其中每个Route将首先等待一些ajax承诺解决,然后才会呈现路由.我看到onEnter不再存在,所以我正在尝试渲染方法.
我的路线定义如下:
{cmsRoutes.map((route, idx) => {
console.log(route.resolve)
return route.component ? (<Route key={idx} path={route.path} exact={route.exact} name={route.name} render={props =>{
route.resolve()
.then(({data})=>{
console.log(data)
return (
<route.component {...props} />
)
})
} } />)
: (null);
},
)}
正如您所看到的,它只是迭代某个数组,它保存每个路由的数据.路由对象的一个??字段是“resolve”,它指向一个返回promise的函数.像这个:
const resolvemanageContactApplications = ()=> {
return ajax('/contact')
};
执行此操作时,我收到以下错误:
Route(…): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.
这当然会发生,因为在执行ajax时,路由没有返回任何内容.问题是:如何让React路由器4等待承诺解析?必须有某种方式.我记得AngaulrJS UI-Router实际上有一些“解决”api.
解决方法:
你需要另一种方法.
如果你的ajax完成了,你应该使用一个状态来存储.然后,为了渲染路径,如果未完成ajax,则可以不渲染任何内容(null或… loading),并使用ajax的结果渲染实际组件或任何您想要的内容.
我可以看到你正在基于一组数据生成路由,为了实现这一点,我将创建一个Component来包装数据加载条件.
它可以作为道具接收:
>决心(ajax功能)
>要渲染的组件
在componentDidMount和componentDidUpdate上执行ajax调用并将state.waitingResolve设置为true,并在resolve的.then()上,将state.waitingResolve设置为false,并将返回的数据也存储到状态.
在渲染上,您检查state.waitingResolve,并渲染null(或… loading)或渲染您从props收到的组件.
它可能看起来很复杂但值得.
内容总结
以上是互联网集市为您收集整理的javascript – React router 4:如何在Route的render方法中等待promise的解析?全部内容,希望文章能够帮你解决javascript – React router 4:如何在Route的render方法中等待promise的解析?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。