iT邦幫忙

2024 iThome 鐵人賽

DAY 30
0
佛心分享-SideProject30

用 Sanity 跟 Nextjs 重寫個人部落格系列 第 30

Day 30 - Sanity Visual Editing 即時響應 & 完賽心得

  • 分享至 

  • xImage
  •  

其實在上一篇就有寫到這段了,只是沒有特別講到而已,現在再拉出來特別講一下重點區域,主要是 sanityFetch() 方法:

import "server-only";
import { QueryOptions, type QueryParams } from "next-sanity";
import { sanityClient } from "@/app/sanity/lib/base";
import { draftMode } from "next/headers";
import { token } from "@/app/sanity/token";

const clientWithToken = sanityClient.withConfig({
  token: token,
});

export async function sanityFetch<const QueryString extends string>({
  query,
  params = {},
  revalidate = 3600,
  tags = [],
}: {
  query: QueryString;
  params?: QueryParams;
  revalidate?: number | false;
  tags?: string[];
}) {
  const isDraftMode = draftMode().isEnabled;

  if (isDraftMode && !token) {
    throw new Error("Missing environment variable SANITY_API_READ_TOKEN");
  }

  const queryOptions: QueryOptions = {};
  let maybeRevalidate = revalidate;

  if (isDraftMode) {
    queryOptions.token = token;
    // 有三種模式 previewDrafts, published, raw
    queryOptions.perspective = "previewDrafts";
    queryOptions.stega = true;

    maybeRevalidate = 0;
  } else if (tags.length) {
    maybeRevalidate = false;
  }
  return clientWithToken.fetch(query, params, {
    ...queryOptions,
    next: {
      revalidate: maybeRevalidate,
      tags,
    },
  });
}

主要看一下:

if (isDraftMode) {
  queryOptions.token = token;
  // 有三種模式 previewDrafts, published, raw
  queryOptions.perspective = "previewDrafts";
  queryOptions.stega = true;

  maybeRevalidate = 0;
} else if (tags.length) {
  maybeRevalidate = false;
}

這段是設定如果使用了 Draft Mode 就要取用 token, perspectivestaga,這三個啟用了模式即時預覽的模式。


最後一天就偷懶一點不多寫了,寫一寫 30 天的心得吧!

原先看到這活動開始就一直想要參加,從活動開始想說先寫個十篇當庫存再開始,結果就這樣一篇都沒寫的到活動報名的最後一天才報名。

在寫這系列文章時心裡是一直想著怎麼帶多點料給讀者、什麼樣的標題可能是我當初遇到問題時會去搜尋的關鍵字,總想著可以藉著著系列幫到多些未來可能碰到問題的人。誰知道寫著寫著感覺我自己才是最大的受益者。

雖然這次 30 天雖然覺得超級痛苦,每個上班日一回家想放鬆一下都沒辦法,假日也是都不行出去走走,有空的時間就是坐( 或躺 )在電腦前想內容、寫內容,犧牲了好多休息時間,但完賽後覺得對這幾十天的自己特別滿意。

老生常談:感謝 IT 邦給了這次機會參加這次活動,希望我的文章能為平台跟讀者帶來正面貢獻。


30 天了,但我的部落個重寫計畫還沒有完成,我會繼續寫到完整的部落格上線,雖然不一定會繼續每天發了,但一定會把網站做出來的,就當作自己架站的筆記來用吧~~

謝謝大家


上一篇
Day 29 - Next.js 與 Sanity 的 Security 驗證
系列文
用 Sanity 跟 Nextjs 重寫個人部落格30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言