其實在上一篇就有寫到這段了,只是沒有特別講到而已,現在再拉出來特別講一下重點區域,主要是 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, perspective 跟 staga,這三個啟用了模式即時預覽的模式。
最後一天就偷懶一點不多寫了,寫一寫 30 天的心得吧!
原先看到這活動開始就一直想要參加,從活動開始想說先寫個十篇當庫存再開始,結果就這樣一篇都沒寫的到活動報名的最後一天才報名。
在寫這系列文章時心裡是一直想著怎麼帶多點料給讀者、什麼樣的標題可能是我當初遇到問題時會去搜尋的關鍵字,總想著可以藉著著系列幫到多些未來可能碰到問題的人。誰知道寫著寫著感覺我自己才是最大的受益者。
雖然這次 30 天雖然覺得超級痛苦,每個上班日一回家想放鬆一下都沒辦法,假日也是都不行出去走走,有空的時間就是坐( 或躺 )在電腦前想內容、寫內容,犧牲了好多休息時間,但完賽後覺得對這幾十天的自己特別滿意。
老生常談:感謝 IT 邦給了這次機會參加這次活動,希望我的文章能為平台跟讀者帶來正面貢獻。
30 天了,但我的部落個重寫計畫還沒有完成,我會繼續寫到完整的部落格上線,雖然不一定會繼續每天發了,但一定會把網站做出來的,就當作自己架站的筆記來用吧~~
謝謝大家