其實在上一篇就有寫到這段了,只是沒有特別講到而已,現在再拉出來特別講一下重點區域,主要是 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 天了,但我的部落個重寫計畫還沒有完成,我會繼續寫到完整的部落格上線,雖然不一定會繼續每天發了,但一定會把網站做出來的,就當作自己架站的筆記來用吧~~
謝謝大家