- 一、什么是 Serverless
- 二、编写你的第一个 Serverless 应用
- 三、Serverless 应用是怎么运行的
- 四、如何提高应用开发调试和部署效率
- 五、serverless 应用
- 阿里云函数计算
- 腾讯云函数
- 使用 vercel 部署你的应用-推荐
- 六、场景案例
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
5.5 详情页页面的实现
和首页一样,详情页也包含数据请求、UI 组件和样式代码三个文件。
数据请求代码文件的命名和首页一样,都是 fetch.ts。与首页不同的是,详情页我们需要从上下文(服务端渲染场景)或 URL 中(浏览器场景)获取到文章 ID,然后根据文章 ID 获取文章详情数据。代码如下:
import { RouteComponentProps } from "react-router"; export default async (ctx) => { let data; if (__isBrowser__) { const id = (ctx as RouteComponentProps<{ id: string }>).match.params.id; data = await (await window.fetch(`/api/detail/${id}`)).json() } else { const id = /detail\/(.*)(\?|\/)?/.exec(ctx.req.path)[1]; data = await ctx.apiDeatilservice.index(id); } return { detailData: data, }; };
详情页的 UI 组件名称为 render$id.tsx
的文件, $id
表示该组件的参数是 id,这样访问 /detail/ 这个路由(id 是变量)时,就会匹配到 web/pages/detail/render$id.tsx 这个页面了。
render$id.tsx
详细代码如下:
import React, { useContext } from "react"; import { IContext, SProps } from "ssr-types"; import { Data } from "@/interface"; import Navbar from "@/components/navbar"; import Content from "@/components/content"; import Title from "@/components/title"; import Tip from "@/components/tip"; import styles from "./index.less"; export default (props: SProps) => { const { state } = useContext<IContext<Data>>(window.STORE_CONTEXT); return ( <div> <Navbar {...props}></Navbar> <div className={styles.container}> <Title>{state?.detailData?.title}</Title> <Tip date={state?.detailData?.date} wordCount={state?.detailData?.wordCount} readingTime={state?.detailData?.readingTime} /> <Content>{state?.detailData?.content}</Content> </div> </div> ); };
详情页的 UI 组件由四部分组成。
- Navbar:导航条。
- Title:文章标题。
- Tip:文章发布时间、字数等提示。
- Content:文章内容。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论