手机版
扫描查看手机站
首页 > 文章 > 站长收藏 > 正文

全栈开发next.js 与strapi 视频课程内容总结5

时间:2025-03-15 16:25:48来源:525游

(1292) Next.js 全栈开发实战课:每日一签网站——调整模版组件内容,开发详情页 - YouTube https://www.youtube.com/watch?v=HnGn48h3kUM



以下是对博主视频第五段内容的总结,基于提供的 YouTube 视频转录内容(Next.js 全栈开发实战课:每日一签网站——调整模板组件内容,开发详情页),整理为清晰结构并提炼核心要点:
视频内容总结:Next.js 全栈开发实战课 - 第五段
1. 开场与课程目标
  • 主题:Next.js 全栈开发实战课第五课。
  • 回顾:前几课完成基础架构和网站模板搭建,连接 Strapi 数据。
  • 目标:
    • 调整模板组件内容(左侧栏和首页)。
    • 开发详情页(二级页面)并加载数据。
2. 初始调试与优化
  • 问题:
    • 本地 Node.js 更新至 23,导致模板运行失败(shiki 兼容性问题)。
    • shiki 是代码高亮库,原模板用于 Changelog,但“每日一签”无需此功能。
  • 解决:
    • 全局搜索 shiki,删除相关引用(rehype-shiki 插件及配置)。
    • 卸载依赖:pnpm un shiki,减少不必要的第三方库。
  • 效果:重新运行 pnpm run dev,项目正常启动。
3. 调整模板组件
  • 目标效果:
    • 左侧:更新为每日一签的预览列表。
    • 右侧:显示每日内容,点击标签进入详情页。
  • 布局结构:
    • 使用 Next.js 的 App Router:
      • layout.tsx:控制全局布局(左右结构)。
      • page.tsx:控制页面内容。
    • 当前状态:已通过 components/layout.tsx 实现左右结构。
  • 调整 Sidebar:
    • 文件:components/layout.tsx。
    • 组件:
      • Sidebar:左侧栏。
      • FlexSidebar:固定侧边栏,包含 main(Intro)和 footer(IntroFooter)。
    • 修改 IntroFooter:
      • 原署名改为“每日一签”。
      • 添加版本号(v0.1.0)。
    • 版本号实现:
      • 在 next.config.mjs 中添加 env: { VERSION: package.version }。
      • 在组件中通过 process.env.VERSION 访问,解决缓存导致的版本不一致问题。
  • 首页链接:
    • 在 app/page.tsx 中,为每条数据添加 next/link,路径为 /qian/[date]。
4. 开发详情页
  • 路径规划:
    • 示例:/qian/2024-12-02。
    • 未来扩展:可能添加数字参数(如 /qian/2024-12-02/4111),暂不实现。
  • 文件结构:
    • 创建 app/qian/[date]/page.tsx,使用动态路由。
  • 函数定义:
    • 类型:Props { params: Promise<{ date: string }> }(Next.js 15+ 使用 Promise)。
    • 两个函数:
      • generateMetadata:生成 SEO 相关元数据。
      • QianPage:页面组件。
  • 元数据:
    • 示例:
      tsx

      export async function generateMetadata({ params }: Props) {
        const date = await params.date;
        return {
          title: `每日一签 - ${date}`,
          description: "每日运势解读",
          authors: [{ name: "Meathill" }],
          alternates: { canonical: `/qian/${date}` },
          openGraph: { title: `每日一签 - ${date}` },
        };
      }
    • 作用:提升 SEO 和社交媒体分享效果。
  • 页面组件:
    • 获取 date:const date = await params.date。
    • 数据加载:调用服务函数获取特定日期的数据。
5. 数据加载与缓存
  • 服务函数:
    • 创建 services/qian.tsx:
      tsx

      import { cache } from 'react';
      import { fetchStrapi } from './index';
      
      export const getQianByDate = cache(async (date: string): Promise<Qian> => {
        const response = await fetchStrapi(`/qians`, {
          filters: { date: { $eq: date } },
          populate: 'thumbnail',
        });
        return response.json().data[0];
      });
    • 使用 filters 而非 documentId,保持 URL 可读性(SEO 友好)。
    • 使用 cache(React 19 功能)避免重复请求。
  • 渲染:
    • 在 app/qian/[date]/page.tsx 中:
      • 调用 getQianByDate(date)。
      • 使用 components/Article.tsx 渲染标题、日期和缩略图。
    • 添加 <p> 标签临时承载 content。
6. 处理图片
  • Strapi Blocks:
    • content 使用 Blocks 格式(JSON 对象数组),支持灵活渲染。
    • 对比纯文本和 Markdown,Blocks 更易自定义样式。
  • 图片选择:
    • Strapi 提供多尺寸图片(原图、大图、中图、小图、缩略图)。
    • 问题:非技术用户可能上传大文件(如 3-4MB)。
    • 解决:创建 utils/index.ts 的 getImageUrl 函数:
      tsx

      import { ImageFormat } from '../constants';
      
      export function getImageUrl(formats: ImageFormat[], target = 'medium') {
        const order = ['thumbnail', 'small', 'medium', 'large'];
        const targetIndex = order.indexOf(target);
        const available = formats.find(f => order.includes(f.name));
        return available?.url || formats[0]?.url;
      }
    • 在 constants/index.ts 定义 ImageFormat 类型和尺寸常量。
  • 渲染图片:
    • 使用普通 <img> 标签(而非 Next.js <Image>,因 Vercel 优化对中国大陆用户不友好)。
    • 属性:src={getImageUrl(qian.attributes.thumbnail.data.attributes.formats)}、alt、className="max-w-full block"、loading="lazy"。
7. 课程总结与展望
  • 完成内容:
    • 删除冗余依赖(shiki)。
    • 调整左侧栏(添加版本号和链接)。
    • 开发详情页,加载特定日期数据并显示图片。
  • 下步计划:
    • 编写 Blocks 渲染组件,优化 content 显示。
  • 建议:
    • 根据目标用户选择图片组件(<Image> 适合非中国大陆用户)。
    • 使用版本号管理缓存问题。
    • 鼓励点赞、分享和完播视频。

核心要点
  • 模板优化:移除不必要功能(shiki),调整左侧栏。
  • 详情页开发:动态路由 + 数据加载 + SEO 元数据。
  • 数据处理:
    • 使用 cache 优化请求。
    • Blocks 格式提升内容灵活性。
  • 图片优化:自定义函数选择合适尺寸,避免 Vercel <Image> 的访问问题。
如果你需要后续帮助(如 Blocks 渲染或部署调试),请告诉我,我会继续协助你完善课程内容!

部落冲突是哪个公司的(部落冲突是哪个公司的中国) 第五人格摄影师怎么对付(第五人格摄影师怎么对付杰克) 和平精英淘汰盒子皮肤必须用特定武器吗(和平精英的淘汰盒子皮肤是全局可见还是自己可见) 光遇破碎季季卡多少钱(光遇季卡礼包价格) 帝国战纪手游酒馆攻略(帝国战纪手游据点在哪) Qtum量子链还有价值吗?Qtum币未来价格2025-2030预测 冰原守卫者后期怎么刷级(冰原守卫者攻略) 三国杀如何快速获得5000将魂(三国杀攒5000将魂要多长时间) 黑色沙漠手游怎么开启自动战斗(黑色沙漠手游怎么自动任务) 第五人格靓仔怎么玩(第五人格 混子) 创造与魔法怎么打晕宠物(创造与魔法怎么快速打晕动物) 三国志幻想大陆吕布带什么战魂(三国志幻想大陆吕布用什么战魂) dnf属性攻击可以双属性吗(dnf属性攻击能多种生效吗) 有什么回合制网游好玩2022(回合制网游排行榜前十,你玩过几个) Filecoin是如何存储数据的?Filecoin的价值体现和未来前景分析 问道手游福瑞怎么加点(问道手游福瑞加点攻略) 加密资产涨跌幅度是怎么计算的?加密资产涨跌幅度计算方式 梦幻西游手游2022龙宫还能玩吗(2021年梦幻手游龙宫还能玩吗) 梦幻西游召唤兽内丹怎么获得(梦幻西游召唤兽内丹攻略) DGP币最新价格 DGP是什么币种以及DGP币怎么样? Web3.0时代,我们的生活将会产生怎样的变化? 原神宵宫突破加多少爆率(原神宵宫突破材料一览) 如何理解区块链转账?用 imToken 进行转账有什么优势? 王者荣耀为什么没人玩嫦娥s27(王者嫦娥怎么没有了) 翻译软件有哪些?带你来了解这三个词) 魔兽世界斯坦索姆钥匙怎么获得(怀旧服斯坦索姆钥匙怎么弄) 梦幻西游炼兽真经怎么获得(梦幻西游炼兽真经使用效果详细分析) 数字货币投资是怎么回事?正规的数字货币投资交易平台大全 易欧怎么绑定银行卡?易欧app数字货币官网登录入口 有没有好玩的武侠手游推荐(有哪些好玩的武侠手游) 什么游戏不充钱也能玩(什么游戏不充钱也能玩的游戏) 区块链TROY币怎么样?TROY币前景及价值深度分析 梦幻西游召唤兽内丹可以更换吗(梦幻西游召唤兽更换内丹后内丹怎么升级) Kusama钱包创建/导入全教程 宝可梦传说阿尔宙斯卡比兽头目怎么抓(皮卡丘和阿尔宙斯打架在哪一集) 有哪些新出的大型网游游戏好玩(大型网络新游戏) 魔兽世界符文布哪里刷(魔兽世界怀旧符文布有什么用) 魔兽世界wlk考达拉平台在哪里(达拉然考考古任务多少能接) 宝可梦传说阿尔宙斯木木枭哪里抓(pokemon go 阿尔宙斯) BDI是什么币种?BDI币怎么样详细介绍 地铁跑酷奥特曼怎么获得(奥特曼地铁跑酷游戏) 梦幻西游手游69八红和神兽哪个好(梦幻手游69带神兽还是多技能全红好) Binance DEX怎么用?Binance DEX交易所初学者使用指南 神途哪个职业比较厉害一点(复古神途职业推荐) 显卡测评:RTX3090挖矿性能及算力怎么样? 正规的数字货币交易所APP有哪些?数字货币交易所app下载大全 消逝的光芒2马尔科杀不杀(消逝的光芒2cv) 和平精英任务卡怎么获得(和平精英里任务卡怎么获得) 宝可梦阿尔宙斯眷恋云怎么抓(阿尔宙斯固执) 有什么回合制网游搬砖游戏(回合制搬砖手游) 一文读懂区块链BSN是什么意思? 冰原守卫者佣兵可以帮忙打架吗(冰原守卫者可以交易吗) 有没有不费流量的手机网游推荐(有没有不费流量的游戏) STARL币合约地址是多少?星链币合约地址介绍 cf荣耀枪王能和枪王排位吗(cf荣耀枪王能和枪王双排吗) STX币上架交易所有哪些?盘点STX币交易平台推荐 如何用cmd命令清理电脑垃圾?电脑清理缓存cmd的指令 虚拟资产期货是什么意思?通俗解释虚拟资产期货 目前什么虚拟币最值得入手?2025有望涨100倍的币预测 火币期权怎么操作?火币期权上手攻略 USDT今日价格多少人民币?泰达币兑人民币今日价格行情 币安怎么买狗狗币?币安买狗狗币流程图文教程 狗狗币交易平台有哪些?十大狗狗币交易平台app官网盘点 国内AICoin电脑版打不开?AICoin官网网页版电脑版入口 Metamask钱包参与OKExChain主网挖矿教程 比特币最便宜的时候多少钱?比特币最高峰的时候多少钱一枚 LBank蓝贝壳交易所全球排名?LBank交易所蓝贝壳官网入口 第五人格猫人有哪些玩法(第五人格 猫) 帝国战纪叛军来袭攻略(帝国战纪ii) 科普:一文看懂明网、深网、暗网的区别 cf信用分低于90怎么办(cf信用分低于320怎么提升) EMC币是什么币?EMC崛起币有什么用? 狗狗币适合长期持有吗?未来有投资价值吗?狗狗币涨不上去的原因 什么交易所平台币比较好?各大所平台币对比 1.76怀旧传奇手游召唤到虎卫你会去做什么(传奇哪里召唤虎卫) 2023比较好玩的手游推荐 有哪些耐玩的手游呢? 以太坊Gas费什么时候最低?以太坊gas调最低需要多久 宝可梦阿尔宙斯头目打死了还会刷新吗(阿尔宙斯打不过谁) 我的世界斧子附魔哪些好(我的世界斧子附魔有哪些) 在区块链DeFi中什么是预言机?预言机的作用是什么? 电脑清理垃圾的命令代码是什么?清理电脑垃圾的三个命令 幻塔艾达骑士怎么获得(幻塔a-03) 一文读懂区块链转账手续费是如何收取的呢? 欧意交易所官网教程,欧意交易所app官方下载 什么是去中心化钱包?去中心化钱包是什么意思? 五款剪辑软件(五款剪辑软件,那个更好用一些) 蜀门手游锻造加8技巧(蜀门手游锻造辅助 v1.0这个有人买了吗?) V神是谁?他是以太坊创始人,是区块链界的真正大佬 王者荣耀海月技能怎么连招(海月ねう) 电脑版cf躲猫猫模式在哪里(电脑版cf躲猫猫在哪里玩) 李晨晒自己拥有9000比特币是真的吗?非你莫属李晨比特币持有现状 消逝的光芒传奇250级要多少赈灾包裹(消逝的光芒一个赈灾包多少经验) 迷你世界铸铁锭怎么获得(迷你世界中铸铁锭怎么获得) ANB币价格多少?ANB币历史价格一览 魔兽世界锦绣谷传送门在哪里(魔兽 锦绣谷) 我的世界裤子可以附魔什么(我的世界裤子附魔什么属性最好) cf虎符有什么用(虎符ctf2020) TRON链跟TRC20一样吗?TRON与TRC20能互转吗区别详解 Exmo交易所究竟怎么样?Exmo交易所是哪个国家的 Solana钱包教程:Solana钱包操作及新项目参与步骤教程

热门文章

推荐专题

更多>>

游戏推荐

更多>>