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

全栈开发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 渲染或部署调试),请告诉我,我会继续协助你完善课程内容!

将EOS私钥导入AToken钱包的方法 三国志幻想大陆魏国新武将(幻想三国志大陆魏国阵容搭配) 星际战甲星察怎么刷(星际战甲怎么观察) 如何使用PayPal购买比特币 PayPal购买比特币的详细图文介绍 区块链DERO币怎么样?DERO币前景及价值解析 哪款三国类角色扮演手游好玩(好玩的三国角色扮演游戏) PSG是什么币种?PSG币怎么样全面介绍 有什么上线就送vip变态手游(上线送满vip无限元宝的变态手游) 手机模拟炒币软件哪个好用?2025最新虚拟币模拟交易app下载安装 消逝的光芒2保险箱密码在哪里看(消逝的光芒2地点) cf娟娟角色属性是什么(cf端游娟娟角色) 魔力宝贝手游:0氪玩家福音(魔力宝贝手游零氪玩法) 问道手游探索技能选哪个好(问道手游探索攻略) XVG币发行价多少?XVG币项目全面介绍 币圈一级市场必备网站有哪些?币圈一级市场Coinlist官网登录入口 fil币未来5年多少钱一枚?如何购买FIL币? ZBG交易所靠谱吗?ZBG交易所怎么样? 币圈看虚拟币行情的网站有哪些?虚拟币交易app软件下载安装 梦幻西游仙灵店铺在哪学() 马云购买200亿比特币是真的吗?马云对比特币看法与未来发展预测 金铲铲之战蛮王主C阵容怎么玩 蛮王主C阵容攻略 ICP是什么币种?怎么样,ICP币最新价格行情 王者荣耀怎么设置不让别人送礼物(王者荣耀怎么设置不接受礼物) 区块链去中心化是什么意思?详解去中心化的含义 王者荣耀专精装备在哪买2022(王者荣耀专精装备上线) GAL是什么币种?GAL币前景和未来价值分析 如何获得火币生态链heco地址?如何提币到heco钱包中 梦幻西游手游69神兽值得买吗(梦幻手游69神兽有用吗) 比特币汇率换算人民币/美元?2009-2025年比特币历史价格走势图 中国比特币持有量第一人现状?李晨晒自己拥有9000比特币 魔兽世界直升110划算吗(魔兽世界直升120划算吗) 英雄联盟周免为什么还没更新(英雄联盟周免是随机的吗) 和平精英可以换微信绑定吗(和平精英可以换微信绑定吗安全吗) 火币网怎么充币USDT? 火币网买USDT图文教程 泰拉瑞亚泰坦手套怎么获得(泰拉瑞亚泰坦手套怎么获得1.2) 什么游戏不花钱又好玩2023(2021年什么游戏好玩不花钱的) 王者荣耀一共有多少个英雄2022(王者荣耀一共有多少个英雄和皮肤) 宝可梦传说阿尔宙斯幽火有什么用(阿尔宙斯gf) CLO币发行总量多少?CLO币发行量及怎么样介绍 我的世界美西螈怎么驯服(我的世界美西螈怎么驯服吃什么) shib币是什么意思?shib币柴犬币怎么买? LUNC币今日最新价格行情,LUNC币最新消息实时汇率历史走势图 如何在币安购买狗狗币?币安买狗狗币操作流程教程 Coinbase钱包安全吗?Coinbase钱包下载教程介绍 Bityard是什么交易所?Bityard交易所手续费介绍 消逝的光芒怎么装备紫外线手电(消逝的光芒怎么用紫外线手电) dnf手游韩服像素武器装扮怎么获得(dnf手游韩服宣传片) 有什么好玩人多的卡牌游戏(人多的卡牌类手游) 帝国战纪的据点是什么(帝国战纪英雄) DKA是什么币种?DKA币未来前景怎么样? USDT钱包哪个好用?最好用的USDT钱包 李晨晒自己拥有9000比特币是真的吗?非你莫属李晨比特币持有现状 Coinlist怎么样?Coinlist打新中签流程介绍 OK如何买柴犬币?OKEX欧易交易所购买SHIB教程 虚拟币的“U”是什么意思?买比特币必须用USDT吗详解 币圈前十名的币都是什么币?盘点2025年虚拟币排行榜20名 矿机算力能达到多少?矿机算力单位如何换算? 如何玩比特币期货合约?比特币合约玩法教程 帝国战纪图腾有什么作用(帝国战纪游戏攻略) 我的世界神奇宝贝大师球怎么获得(我的世界神奇宝贝大师球获得方式) 数字钱包可以有效规避被盗或私钥丢失的安全问题吗? 和平精英老兵聚力怎么兑换(和平精英老兵聚力怎么兑换东西) ipfs是什么?IPFS星际文件系统新手指南 区块链扫盲:比特币期权到期是什么意思? 币交易所K线图怎么看?Binance官网_币交易所官网入口 CF灵狐者的约定怎么没有会员(cf灵狐者的约定每个月几号出) TP钱包基础知识:OKExChain钱包转账/收款教程 YFI币怎么获得?YFI币购买和交易操作教程 TFUEL是什么币种?TFUEL币前景和价值介绍 区块链知识:Schnorr 签名如何提升比特币 Uni币2025价格能到多少?Uni币未来升值潜力2025-2030价格预测 和平精英怎么解绑身份证号(和平精英怎么解绑身份证号未成年) 有哪些游戏是免费赠送vip的(免费送vip的游戏软件) 创造与魔法河豚刺身怎么做(创造与魔法河豚刺青) 和平精英四级包嘟嘟怎么装备(和平精英4级包) 创造与魔法甘蔗食谱一览(创造与魔法甘蔗食谱可以做什么) IDEX是什么币种?IDEX币前景和未来价值分析 火币怎么买狗狗币?火币app买狗狗币与比特币步骤 哪款策略养成回合制游戏免费(策略回合制单机手游推荐) 永续比特币合约开多少倍合理?比特币永续合约手续费怎么算? 消逝的光芒2任务中无法快速移动怎么办(消逝的光芒2任务攻略) 暗区突围机密文件在哪刷(暗区突围机密文件在哪刷新概率高) 问道手游老杜是谁(问道老杜死了有什么奖励) 苹果手机密码忘记了怎么办才能解开?五个步骤轻松解锁 csgo连接社区服测试失败怎么办(csgo社区服务器连不上) STRAX是什么币种?STRAX币前景和未来的价值分析 欧易活期挖矿可以一直挖吗?欧易挖矿怎么样? PUSH币合约地址多少?PUSH币属于什么链? HARE币怎么买?野兔币/HARE币买入和交易教程介绍 原神雷音权现在哪里(元神雷音权在哪) 王者荣耀进哪个区都一样吗(王者在哪个区有关系么) 火币网怎么提现比特币?火币网提现比特币图文步骤 HECO钱包APP的安装与使用教程 科普:一文看懂明网、深网、暗网的区别 热点币(WFC)是什么币?WFC币上架交易所和官网、总量介绍 原神f4遗迹守卫在哪个位置(遗迹f4怎么打) 冰原守卫者蛛丝布怎么获得(冰原守卫者wiki) ENS是什么币种?ENS币前景及投资价值深度分析 抹茶交易所不注册了怎么办?抹茶交易所app注册成功步骤 区块链CryptoPunks是什么意思?CryptoPunks代币是什么?

热门文章

推荐专题

更多>>

游戏推荐

更多>>