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

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

时间:2025-11-09 15:26:49来源: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 渲染或部署调试),请告诉我,我会继续协助你完善课程内容!

梦幻西游莲心剑意状态怎么开(梦幻西游莲花剑意) 狗狗币一天挖十万个是真的吗?挖矿多久挖一个狗狗币 王者荣耀甄姬S26怎么出装(王者荣耀甄姬怎么出装搭配铭文) 英雄联盟可望而不可及怎么获得(lol可及性怎么设置) cfm关小雨一共有多少套时装(cf关小雨值不值得入手) TRON和TRC20一样吗?TRC20和波场TRX的区别详解 Scatter是什么钱包?Scatter钱包使用教程介绍 我的世界仙人掌有什么用(我的世界手游仙人掌有什么用) 最新蜀门手游青城攻略(蜀门手游青城技能加点图) 宝可梦传说阿尔宙斯交换宝可梦要会员吗(阿尔宙斯联机) 和平精英灯塔在哪(和平精英海岛灯塔在哪) 金铲铲之战s7星界龙转职删了吗(金铲铲星龙战神装备) 币币和法币是什么意思?币币交易和法币交易的区别 MEME币多少钱一个?MEME币今日行情实时报价历史走势 创造与魔法陆行鸟羽毛怎么生产(创造与魔法陆行鸟羽毛怎么生产的) 消逝的光芒2会加密吗(消逝的光芒2有dlc吗) 和平精英可以换微信绑定吗(和平精英可以换微信绑定吗安全吗) 消逝的光芒2选哪个阵营(消逝的光芒2角色) 第五人格 国服黄衣牵制战术推荐(第五人格黄衣之主百度百科) 比特币发行价格多少人民币一个?比特币发行时间官方资料 usd是什么货币兑换人民币汇率?缩写usd是什么国家的货币简称 英雄联盟手游信誉3多久恢复(lol手游信誉等级3怎么办) Gate.io交易平台怎么注册新帐号?Gate.io官方登录网页版国内地址分享 和平精英安卓转苹果皮肤还在吗(安卓系统玩的和平精英转到苹果系统皮肤还在不在) 如何参与币安IEO项目?带你玩转币安IEO项目 宝可梦阿尔宙斯狃拉怎么进化(宝可梦传说阿尔宙斯 pokemon legends arceus) coindeal交易平台怎么样?coindeal交易所属于哪个国家的 三国志幻想大陆蜀国阵容推荐(三国志幻想大陆蜀国阵容推荐) 4个软件让你了解英语翻译软件哪个好用(英语翻译软件推荐) PKT是什么币种?PKT币前景怎么样? 期货交易平台哪个最可靠?正规期货交易平台APP排行榜 有带有gm权限的游戏吗(游戏gm权限是什么) DNF红眼105级武器怎么选择(dnf100级红眼武器打什么宝珠) 宝可梦传说阿尔宙斯全图鉴有多少只(宝可梦阿尔宙斯介绍) 梦幻须弥真言兽决效果是什么(梦幻西游须弥真言兽决什么效果) 方舟生存进化狮鹫困水不能超过多少秒(方舟狮鹫怎么做困兽笼) 和平精英购买点券失败请重试怎么办(和平精英显示购买点卷失败) 以太坊重组攻击是什么?以太坊2.0合并后将更难执行 无限元宝稀有手游有哪些(无限元宝无限资源的游戏) ipv4无Internet访问权限?你可能没有权限访问使用网络资源 类似神武变态的手游有哪些(有没有类似神武的游戏) 将USDT从交易所提币到火币钱包操作步骤教程 角色扮演类多人游戏哪一款良心(角色扮演的游戏推荐) 蜀门手游如何在乱斗场生存(蜀门手游怎么排牌子) c盘的垃圾文件在哪个文件夹?如何清除电脑c盘的垃圾文件 安卓有哪些大型3d手游好玩(安卓3d大型游戏) 挖矿的算力有什么用?影响算力的因素有哪些? 瑞波币交易平台有哪些?顶尖的瑞波币交易所app官网下载 ELON币合约地址是什么?ELON币简介 ZB即将恢复提款成功了吗?中币交易所zb.com目前现状最新消息 比特币节点是什么意思?比特币节点有什么用? 泰达币USDT买卖交易详细操作教程 Tidebit是什么交易所?Tidebit交易所怎么样? 消逝的光芒2在哪里买(消逝的光芒2白嫖) 摩尔庄园铜矿石怎么得?快速收集铜矿石的方法 区块链钱包科普:如何通过私钥创建以太坊钱包地址? csgo怎么看自己打了别人多少血(csgo怎么看打人的血量) 梦幻西游九转金丹怎么获得(梦幻九转金丹怎么得到) okcoin交易平台还在吗?okcoin交易平台官网地址 SUMO是什么币种?SUMO币前景和未来价值分析 和平精英怎么选择单人模式(和平精英如何选择单人模式) 待机时间长的手机有哪些?2022续航能力强的手机排行榜 即时战略类游戏有哪些好玩(即时战略游戏都有哪些) 我的世界怎么在活板门上放东西(我的世界活板门怎么向上开) 蜀门手游支线任务怎么取消(蜀门主线任务) 路由器怎样重新设置wifi密码和名称?简单实用的无线路由器设置方法 帝国战纪游戏攻略(帝国战纪游戏攻略图文详解) 加密资产涨跌幅度是怎么计算的?加密资产涨跌幅度计算方式 梦幻新诛仙妖兽值得买吗(梦幻新诛仙妖兽值得入吗) 比特币交易:比特币卖出需要有人买才能成交吗? 冰原守卫者怎么快速升级(冰原守卫者怎么快速升级工匠等级) cf荣耀枪王如何升到枪王之王(cf枪王怎么到荣耀枪王) 和平精英怎么自救(和平精英怎么自救 和平精英自救方法) 玩比特币合约能暴富吗是真的吗?币圈靠比特币期货合约发财的人 Coinbase Pro是什么交易所?Coinbase Pro交易所怎么样? 创造与魔法大顽皮保底饲料是多少(创造与魔法大顽皮值多少魔晶) 王者荣耀猴子最强出装是什么(王者猴子的最强出装) OXT是什么币种?兰花协议/OXT币未来前景和价值分析 cf扭蛋机有保底吗(cf扭蛋机值不值) 在中国大陆U币交易违法吗?2025年全球U币交易所平台排行榜 ZT币前景怎么样?ZT币未来价值和前景分析 内置菜单版本游戏哪个好玩(内置菜单功能单机游戏) Ledger钱包怎么使用?Ledger钱包收发比特币教程 蜀门手游新职业墨韵怎么样(蜀门墨韵玩的人很少) BitKeep钱包安全吗?BitKeep钱包中文叫什么? FiL币在哪个平台上能买到?FiL币在哪个交易所交易? 永续合约短线交易技巧详细图文教程 我的世界什么冰不会融化(我的世界不会让冰融化的光源) 《传奇霸业手游》道士快速升级攻略(传奇霸业手游道士技能搭配) LATOKEN交易所怎么注册?LATOKEN注册教程介绍 宝可梦阿尔宙斯连接绳怎么获得(阿尔宙斯携带什么) 炒币怎么选币?炒币选币技巧揭秘(附常见的炒币骗局汇总) 思维导图软件哪个好?三款款思维导图软件对比评测 旅游app排行榜前十名 口碑最好的旅游软件排名 如何配置Trezor钱包?Trezor硬件钱包使用指南 斗罗大陆精神力有什么用(斗罗大陆里的精神力是怎么划分的) 冰原守卫者怎么获得水(冰原守卫者怎么喝水) 原神夜兰武器用什么好(夜兰怎么召唤) EVZ是什么币种?EVZ币详细介绍 宝可梦传说阿尔宙斯黏美儿怎么进化(黏美伊尔在第几级进化)

热门文章

推荐专题

更多>>

游戏推荐

更多>>