代码之家  ›  专栏  ›  技术社区  ›  Moshe

为什么不在清醒状态下准备好渲染?

  •  0
  • Moshe  · 技术社区  · 5 年前

    我正在为中的文档自定义prview部分 sanity.io . 因此,我创建了以下文档:

    export default {
      name: 'news',
      type: 'document',
      title: 'News',
      fields: [
        {
          name: 'title',
          title: 'Title',
          type: 'string',
        },
        ...
        {
          name: 'author',
          title: 'Author',
          type: 'string',
        },
        ...
      ],
      preview: {
        select: {
          title: 'title',
          subtitle: 'author',
        }
      }
    }
    

    我在录音室里想怎么做就怎么做。这个 title 预览窗格中的节显示文档的标题和 subtitle 节显示作者的姓名。

    但是,如果我试图修改 author 通过使用 prepare ,则不再工作。例如,查看同一文档的以下变体:

    export default {
      name: 'news',
      type: 'document',
      title: 'News',
      fields: [
        {
          name: 'title',
          title: 'Title',
          type: 'string',
        },
        ...
        {
          name: 'author',
          title: 'Author',
          type: 'string',
        },
        ...
      ],
      preview: {
        select: {
          title: 'title',
          author: 'author',
        }
      },
      prepare(selection) {
        const { author } = selection
        return {
          ...selection,
          subtitle: author && `${author} is the author`
        }
      }
    }
    

    这个 标题 预览字段已呈现,但在 字幕 章节。不过,据我所知,这应该行得通。我想知道为什么不。

    有什么想法吗?

    0 回复  |  直到 5 年前
        1
  •  3
  •   thomax    5 年前

    prepare 实际上是预览中调用的函数。它是根对象的单独字段。移动准备内部 preview 就像这样:

    preview: {
      select: {
        title: 'title',
        author: 'author'
      },
      prepare(selection) {
        const { author } = selection
        return {
          ...selection,
          subtitle: author && `${author} is the author`
        }
      }
    }
    
    推荐文章