You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何展示Sanity富文本编辑器编写的博客前100字符?

解决Sanity富文本数组无法截取摘要的问题

问题背景

开发博客时,此前使用普通文本可通过substring(0, 100)展示前100字符的摘要,但从Sanity API获取的富文本内容为数组格式,直接调用substring会报错。当前React代码通过BlockContent渲染完整富文本,但列表页仅需显示开头部分内容。

解决方案

方案1:在GROQ查询中生成摘要

利用Sanity的GROQ查询直接处理富文本数组,提取并截断文本,前端直接获取处理后的字符串。

修改查询语句:

const query = `*[_type == "blog"] | order(publishedAt desc) {
  title,
  slug,
  publishedAt,
  // 拼接所有文本内容并截断前100字符
  excerpt: string::trim(string::join(content[].children[].text, ""))[0..99] + "..."
}`

前端渲染时直接使用blog.excerpt:

<p class="blog-content">{blog.excerpt}</p>

方案2:前端处理富文本数组

编写工具函数遍历富文本数组,提取所有文本内容后再截断。

添加工具函数:

// 提取富文本文本并生成指定长度的摘要
const getExcerpt = (blocks, maxLength = 100) => {
  let fullText = '';
  blocks.forEach(block => {
    block.children?.forEach(child => {
      if (child.text) fullText += child.text;
    });
  });
  const trimmedText = fullText.trim();
  return trimmedText.length > maxLength 
    ? `${trimmedText.substring(0, maxLength)}...` 
    : trimmedText;
};

渲染时调用函数:

<p class="blog-content">{getExcerpt(blog.content)}</p>

替换原代码中的渲染部分

将原代码中使用BlockContent渲染完整内容的部分,替换为上述任一方案的摘要渲染即可。

内容的提问来源于stack exchange,提问作者Naveer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 02:00:33