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

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

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

不用实名认证的古风手游有哪些(不用实名制的手游) 碧蓝航线五周年戒指怎么获得(碧蓝航线周年礼盒多少钱) 梦幻新诛仙元宝怎么用划算(梦幻新诛仙元宝换银币表) binance中国官网地址入口?binance中国用户怎么注册 dnf装备锻造在哪2023(dnf在哪锻造装备会失败吗) 2023年什么行业最有前景(2023年最挣钱的十个行业是什么) TEP是什么币种?邓普顿TEP币前景和价值分析 创造与魔法水池龟吃什么(创造与魔法水池龟吃什么?) BL3P是什么交易所?BL3P交易所怎么样? 梦幻西游手游69物理系选哪个门派好(梦幻西游手游69物理门派分析) usdt可以在交易平台之间互转吗?usdt转到另一个交易所步骤? 王者荣耀怎么换qq号登录(王者荣耀怎么换qq号登陆) DNF贵族机要装备去哪了(dnf充值贵族称号) 有什么比较好玩的网游推荐(有哪些比较好玩的网游) 手把手教你从零重装Win10系统(手把手教你如何重装win10系统) 区块链NWC币是什么币种?NWC币前景怎么样? 火网全球交易平台官网打不开了?火帀全球站交易平台app下载地址 TBC防骑和惩戒骑哪个练级快(魔兽世界防骑和惩戒骑) KEX是什么交易所?KEX交易所怎么样? 卧龙苍天陨落怎么传送(卧龙怎么走) 创造与魔法混战服选什么宠物(创造与魔法混战服新手攻略2020) 币圈十大交易所APP下载,币圈新人必备的十款虚拟币交易软件 DeFi项目教程:手把手教你1inch使用教程 第五人格酿酒师天赋怎么加点(第五人格调酒师加点2020) okex子账户有什么用?okex子账户操作教程 跨链桥是什么意思?跨链桥的原理是什么? 雷达币一夜之间没有了怎么回事?雷达币会突然消失归零原因 币圈看盘软件哪个最好?专业的看盘软件AICoin使用评测 山寨币交易所有哪些?十大山寨币交易所排行榜 区块链LINK币是什么币?LINK币投资前景点评 2023高期待值游戏有哪些(2021年比较期待的手游) 冰原守卫者三级燃料如何获取(冰原守卫者武器大全) 黑色沙漠手游料理师的风采知识怎么获得(黑色沙漠料理从零到道人) 王者荣耀怎么查看自己看过谁(王者荣耀如何查看自己看过谁) 元气骑士空中支援碎片怎么获得(元气骑士空中支援碎片在哪) 江南百景图荷包怎么获得(江南百景图中的荷包怎么获得) 数字货币永续合约资金费率套利风险大不大? 宝可梦朱紫怎么扔球(宝可梦 紫色) CAKE币是什么币?币安智能链龙头CAKE币介绍 大零币/ZEC怎么购买?ZEC币购买交易操作教程 光遇抱头先祖在哪里(光遇抱头动作在哪里) 怎么卖USDT币最安全?出售USDT币最安全方法介绍 摩尔庄园铜矿石怎么得?快速收集铜矿石的方法 蜀门手游城战荣誉官在哪里(蜀门城战奖励) Binance在中国还可以用吗?Binance US支持哪些国家用户与Binance区别分析 欧交易所app下载官网地址,欧交易所官网登录平台官方介绍 一文教你玩转Defi行情的方法 王者荣耀蒙恬值得练吗(王者荣耀蒙恬值得玩吗) STEX交易所如何充币?STEX交易所注册、充值、提现全教程 小蚁币(NEO)是什么币?如何买小蚁币(NEO)? 宝可梦阿尔宙斯传说泥炭块怎么获得(宝可梦 阿尔宙斯传说) 三款顶级应用(安卓手机必备黑科技软件推荐) 问道手游后期哪个职业好组队(问道手游后期哪个职业厉害) 使命召唤19多少钱(xbox使命召唤19多少钱) 英雄联盟手游天使如何出装 天使出装推荐(lol天使出什么装备) 王者荣耀怎么取消自动拒绝投降(王者荣耀怎么关掉自动拒绝投降) 王者荣耀未成年模式怎么解除(王者荣耀未成年模式怎么解除绑定) 和平精英怎么改快捷消息(和平精英怎么改快捷消息提示) 手游cf武器工坊在哪(手游cf的武器坊在哪) REN币未来前景怎么样?REN币历史最高价和最低价介绍 kishu是什么币?kishu在哪买?纪州犬币kishu购买教程 USDC币怎么兑换人民币?USDC币兑换成法币操作方法 苹果手机注册ins总是显示没有网络?图解苹果注册ins详细教程 暗黑破坏神不朽死灵法师能召唤几个(暗黑破坏神不朽死灵法师召唤几个人) 和平精英怎么快速获得服饰币(和平精英怎么快速获得服饰币不用钱) 云顶之弈光明哨兵怎么合成(云顶之弈光明哨兵如何合成) The DAO众筹事件与以太坊分叉 消逝的光芒2滑铲用不了是为什么(消逝的光芒2武器一览表) dnf自动修理怎么触发(dnf自动修理是修理一个还是全部) 破碎大陆武器的介绍 武器详解攻略 宝可梦阿尔宙斯六尾在哪(精灵宝可梦阿尔宙斯在哪抓) 宝可梦阿尔宙斯巨钳螳螂怎么进化(阿尔宙斯 极巨化) 宝可梦阿尔宙斯连接绳怎么获得(阿尔宙斯携带什么) CHI是什么币种?CHI币怎么样详细介绍 宝可梦阿尔宙斯传说仙子伊布怎么进化(宝可梦仙子伊布进化条件) 哪些角色扮演类手游好玩(有什么好的角色扮演手游) SUI币2025年能涨到多少?SUI币2025-2030年未来价格预测 Ledger钱包怎么使用?Ledger钱包收发比特币教程 苹果手机怎么刷机? iphone刷机教程让你40秒破iphone锁屏密码 方舟伽马值原始是多少(方舟进化生存伽马系数择那么调) 创造与魔法火山喷发代表着什么(创造与魔法火山boss刷新点) 币安手机app怎么充值?币安app充值图文详细教程 挖矿导致显卡现疯狂涨价潮,买显卡胜过买茅台? 三国志幻想大陆山河攻略(三国志幻想大陆山河志) IPFS挖矿怎么挖?IPFS挖矿靠谱吗?IPFS挖矿收益有哪些? 和平精英可以在电脑上玩吗(和平精英可以在电脑上面玩吗) 哪一款免费的修仙游戏好玩(有没有免费修仙游戏) 2013年如果买了5万比特币现在能赚多少?比特币历史走势趋势 中国有正规的比特币交易所吗?正规比特币交易所前十排行 派币今天最新官方消息真实_派币今天最新官方消息真实派最新消息 奥比岛手游爱心眼飞吻表情怎么获得(奥比岛爱心白t为什么交易不了) 英雄联盟手游怎么加好友2022(英雄联盟手游怎么加好友id) 名将之弈怎么备战(名将之弈阵容) USDT属于什么币种_usdt属于什么币种合法不 宝可梦传说阿尔宙斯火球鼠哪里抓(阿尔宙斯在哪抓) 和平精英小团团语音怎么设置(和平精英小团团视频) 有没有无限元宝的传奇(无限元宝的传奇游戏) FTN是什么币种?FTN币前景怎么样? 火币网怎么充币USDT? 火币网买USDT图文教程 做空比特币教学:在加密货币熊市如何从空头赚币?看这一篇就够了

热门文章

推荐专题

更多>>

游戏推荐

更多>>