{"id":1585,"date":"2022-07-06T16:45:22","date_gmt":"2022-07-06T08:45:22","guid":{"rendered":"https:\/\/fromideatocreation.com\/?p=1235"},"modified":"2023-07-02T16:20:37","modified_gmt":"2023-07-02T08:20:37","slug":"%e9%a0%90%e5%85%88%e6%b8%b2%e6%9f%93%e5%92%8c%e6%95%b8%e6%93%9a%e7%8d%b2%e5%8f%96-5","status":"publish","type":"post","link":"https:\/\/fromideatocreation.com\/?p=1585","title":{"rendered":"\u3010NEXT.JS \u7cfb\u5217\u3011\u9810\u5148\u6e32\u67d3\u548c\u6578\u64da\u7372\u53d6 5"},"content":{"rendered":"\n<h4 class=\"wp-block-heading\">\u5be6\u505a getStaticProps<\/h4>\n\n\n\n<p>\u9996\u5148\uff0c\u5b89\u88dd <a href=\"https:\/\/github.com\/jonschlinkert\/gray-matter\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"gray-matter\">gray-matter<\/a>\uff0c\u5b83\u53ef\u4ee5\u8b93\u6211\u5011\u89e3\u6790\u6bcf\u500b markdown \u6587\u4ef6\u4e2d\u7684 metadata\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">$ npm install gray-matter<\/code><\/pre>\n\n\n\n<p>\u63a5\u4e0b\u4f86\uff0c\u6211\u5011\u5c07\u5efa\u7acb\u4e00\u500b\u7c21\u55ae\u7684\u51fd\u5f0f\u5eab\uff0c\u7528\u65bc\u5f9e\u6a94\u6848\u7cfb\u7d71\u4e2d\u7372\u53d6\u8cc7\u6599\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5efa\u7acb\u4e00\u500b\u540d\u70ba lib \u7684\u9802\u5c64\u76ee\u9304<\/li>\n\n\n\n<li>\u5728 lib \u4e2d\uff0c\u5efa\u7acb\u4e00\u500b\u540d\u70ba <code>posts.js<\/code> \u7684\u6587\u4ef6\uff0c\u5176\u5167\u5bb9\u5982\u4e0b<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">import fs from 'fs';\nimport path from 'path';\nimport matter from 'gray-matter';\n\nconst postsDirectory = path.join(process.cwd(), 'posts');\n\nexport function getSortedPostsData() {\n  \/\/ Get file names under \/posts\n  const fileNames = fs.readdirSync(postsDirectory);\n  const allPostsData = fileNames.map((fileName) =&gt; {\n    \/\/ Remove \".md\" from file name to get id\n    const id = fileName.replace(\/\\.md$\/, '');\n\n    \/\/ Read markdown file as string\n    const fullPath = path.join(postsDirectory, fileName);\n    const fileContents = fs.readFileSync(fullPath, 'utf8');\n\n    \/\/ Use gray-matter to parse the post metadata section\n    const matterResult = matter(fileContents);\n\n    \/\/ Combine the data with the id\n    return {\n      id,\n      ...matterResult.data,\n    };\n  });\n  \/\/ Sort posts by date\n  return allPostsData.sort(({ date: a }, { date: b }) =&gt; {\n    if (a &lt; b) {\n      return 1;\n    } else if (a &gt; b) {\n      return -1;\n    } else {\n      return 0;\n    }\n  });\n}<\/code><\/pre>\n\n\n\n<p>\u6ce8\u610f\uff1a\u5728 Next.js \u4e2d\uff0c<code>lib<\/code> \u6587\u4ef6\u593e\u6c92\u6709\u50cf <code>pages<\/code> \u6587\u4ef6\u593e\u90a3\u6a23\u7684\u6307\u5b9a\u540d\u7a31\uff0c\u56e0\u6b64\u60a8\u53ef\u4ee5\u5c07\u5176\u547d\u540d\u70ba\u4efb\u4f55\u540d\u7a31\u3002 \u901a\u5e38\u4f7f\u7528 <code>lib<\/code> \u6216 <code>utils<\/code> \u662f\u6163\u4f8b\u3002<\/p>\n\n\n\n<p>\u73fe\u5728\uff0c\u6211\u5011\u9700\u8981\u70ba <code>getSortedPostsData<\/code> \u6dfb\u52a0\u4e00\u500b\u532f\u5165\uff0c\u4e26\u5728 <code>pages\/index.js<\/code> \u7684 <code>getStaticProps<\/code> \u4e2d\u547c\u53eb\u5b83\u3002<\/p>\n\n\n\n<p>\u5728\u7de8\u8f2f\u5668\u4e2d\u6253\u958b <code>pages\/index.js<\/code> \u4e26\u5728\u532f\u51fa\u7684 <code>Home<\/code> \u5143\u4ef6\u4e0a\u65b9\u6dfb\u52a0\u4ee5\u4e0b\u7a0b\u5f0f\u78bc\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">import { getSortedPostsData } from '..\/lib\/posts';\n\nexport async function getStaticProps() {\n  const allPostsData = getSortedPostsData();\n  return {\n    props: {\n      allPostsData,\n    },\n  };\n}<\/code><\/pre>\n\n\n\n<p>\u901a\u904e\u5728 <code>getStaticProps<\/code> \u4e2d\u7684 <code>props<\/code> \u7269\u4ef6\u4e2d\u8fd4\u56de <code>allPostsData<\/code>\uff0c\u90e8\u843d\u683c\u6587\u7ae0\u5c07\u4f5c\u70ba <code>props<\/code> \u50b3\u905e\u7d66 <code>Home<\/code> \u5143\u4ef6\u3002 \u73fe\u5728\u60a8\u53ef\u4ee5\u50cf\u9019\u6a23\u8a2a\u554f\u90e8\u843d\u683c\u6587\u7ae0\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">export default function Home ({ allPostsData }) { ... }<\/code><\/pre>\n\n\n\n<p>\u70ba\u4e86\u986f\u793a\u90e8\u843d\u683c\u6587\u7ae0\uff0c\u8b93\u6211\u5011\u66f4\u65b0 Home \u5143\u4ef6\u4ee5\u6dfb\u52a0\u53e6\u4e00\u500b <code>&lt;section&gt;<\/code> \u6a19\u8a18\uff0c\u5176\u4e2d\u5305\u542b\u60a8\u7684\u81ea\u6211\u4ecb\u7d39\u90e8\u5206\u4e0b\u65b9\u7684\u6578\u64da\u3002 \u4e0d\u8981\u5fd8\u8a18\u5c07 props \u5f9e <code>()<\/code> \u66f4\u6539\u70ba <code>({ allPostsData })<\/code>\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"jsx\" class=\"language-jsx\">export default function Home({ allPostsData }) {\n  return (\n    &lt;Layout home&gt;\n      {\/* Keep the existing code here *\/}\n\n      {\/* Add this &lt;section&gt; tag below the existing &lt;section&gt; tag *\/}\n      &lt;section className={`${utilStyles.headingMd} ${utilStyles.padding1px}`}&gt;\n        &lt;h2 className={utilStyles.headingLg}&gt;Blog&lt;\/h2&gt;\n        &lt;ul className={utilStyles.list}&gt;\n          {allPostsData.map(({ id, date, title }) =&gt; (\n            &lt;li className={utilStyles.listItem} key={id}&gt;\n              {title}\n              &lt;br \/&gt;\n              {id}\n              &lt;br \/&gt;\n              {date}\n            &lt;\/li&gt;\n          ))}\n        &lt;\/ul&gt;\n      &lt;\/section&gt;\n    &lt;\/Layout&gt;\n  );\n}<\/code><\/pre>\n\n\n\n<p>\u5982\u679c\u60a8\u8a2a\u554f <a href=\"http:\/\/localhost:3000\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/localhost:3000<\/a>\uff0c\u60a8\u73fe\u5728\u61c9\u8a72\u6703\u770b\u5230\u90e8\u843d\u683c\u8cc7\u6599\u3002<\/p>\n\n\n\n<div class=\"wp-block-qubely-image qubely-block-5571bb\"><div class=\"qubely-block-image  qubely-image-layout-simple\"><div class=\"qubely-image-media qubely-vertical-alignment-center qubely-horizontal-alignment-center\"><figure><div class=\"qubely-image-container\"><img decoding=\"async\" class=\"qubely-image-image\" src=\"https:\/\/fromideatocreation.com\/wp-content\/uploads\/2022\/07\/blog-data.png\" alt=\"\"\/><\/div><\/figure><\/div><\/div><\/div>\n\n\n\n<p>\u606d\u559c\uff01 \u6211\u5011\u5df2\u7d93\u6210\u529f\u5730\uff08\u5f9e\u6a94\u6848\u7cfb\u7d71\uff09\u7372\u53d6\u4e86\u5916\u90e8\u8cc7\u6599\uff0c\u4e26\u4f7f\u7528\u9019\u4e9b\u8cc7\u6599\u9810\u5148\u6e32\u67d3\u4e86\u7d22\u5f15\u9801\u9762\u3002<\/p>\n\n\n\n<div class=\"wp-block-qubely-image qubely-block-30861c\"><div class=\"qubely-block-image  qubely-image-layout-simple\"><div class=\"qubely-image-media qubely-vertical-alignment-center qubely-horizontal-alignment-center\"><figure><div class=\"qubely-image-container\"><img decoding=\"async\" class=\"qubely-image-image\" src=\"https:\/\/fromideatocreation.com\/wp-content\/uploads\/2022\/07\/index-page-1.png\" alt=\"\"\/><\/div><\/figure><\/div><\/div><\/div>\n\n\n\n<p>\u8b93\u6211\u5011\u5728<a href=\"https:\/\/fromideatocreation.com\/archives\/1241\" title=\"\u4e0b\u4e00\u9801\">\u4e0b\u4e00\u9801<\/a>\u8a0e\u8ad6\u4f7f\u7528 <code>getStaticProps<\/code> \u7684\u4e00\u4e9b\u6280\u5de7\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148\uff0c\u5b89\u88dd gray-matter\uff0c\u5b83\u53ef\u4ee5\u8b93\u6211\u5011\u89e3\u6790\u6bcf\u500b markdown \u6587\u4ef6\u4e2d\u7684 metadata\u3002<\/p>\n","protected":false},"author":1,"featured_media":1165,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"qubely_global_settings":"","qubely_interactions":"","inline_featured_image":false,"_ti_tpc_template_sync":false,"_ti_tpc_template_id":"","footnotes":""},"categories":[164,133],"tags":[163],"class_list":["post-1585","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-next-js","category-133","tag-next-js"],"acf":[],"aioseo_notices":[],"qubely_featured_image_url":{"full":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download.png",720,454,false],"landscape":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download.png",720,454,false],"portraits":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-540x320.png",540,320,true],"thumbnail":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-150x150.png",150,150,true],"medium":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-300x189.png",300,189,true],"medium_large":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download.png",640,404,false],"large":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download.png",640,404,false],"1536x1536":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download.png",720,454,false],"2048x2048":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download.png",720,454,false],"qubely_landscape":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download.png",720,454,false],"qubely_portrait":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-540x320.png",540,320,true],"qubely_thumbnail":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-140x100.png",140,100,true],"nazare_single_thumb":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download.png",720,454,false],"nazare_post_card_thumb":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-480x454.png",480,454,true],"nazare_widget_thumb":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-100x100.png",100,100,true],"nazare_widget_first_thumb":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-350x206.png",350,206,true],"nazare_el_banner_left":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download.png",720,454,false],"nazare_el_banner_right":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-560x454.png",560,454,true],"nazare_el_post_400x376":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-400x376.png",400,376,true],"nazare_el_post_520x460":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-520x454.png",520,454,true],"nazare_el_post_500x335":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-500x335.png",500,335,true],"nazare_el_post_500x300":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-500x300.png",500,300,true],"nazare_el_post_655x640":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-655x454.png",655,454,true],"nazare_el_post_500x290":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-500x290.png",500,290,true],"nazare_el_post_416x278":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-416x278.png",416,278,true],"nazare_el_post_480x425":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-480x425.png",480,425,true],"nazare_el_post_635x640":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-635x454.png",635,454,true],"nazare_el_post_305x177":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-305x177.png",305,177,true],"nazare_el_post_400x400":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-400x400.png",400,400,true],"nazare_el_post_400x360":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-400x360.png",400,360,true],"nazare_el_post_416x416":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-416x416.png",416,416,true],"nazare_el_post_485x430":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-485x430.png",485,430,true],"nazare_el_post_700x467":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-700x454.png",700,454,true],"nazare_el_post_1000x581":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download.png",720,454,false],"nazare_post_1320x605":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download.png",720,454,false],"nazare_post_705x565":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-705x454.png",705,454,true],"nazare_post_400x265":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-400x265.png",400,265,true],"nazare_el_post_1248x630":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download.png",720,454,false],"woocommerce_thumbnail":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-300x300.png",300,300,true],"woocommerce_single":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-600x378.png",600,378,true],"woocommerce_gallery_thumbnail":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-100x100.png",100,100,true],"shop_catalog":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-300x300.png",300,300,true],"shop_single":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-600x378.png",600,378,true],"shop_thumbnail":["https:\/\/fromideatocreation.com\/wp-content\/uploads\/2023\/05\/app-download-100x100.png",100,100,true]},"qubely_author":{"display_name":"Wen","author_link":"https:\/\/fromideatocreation.com\/?author=1"},"qubely_comment":0,"qubely_category":"<a href=\"https:\/\/fromideatocreation.com\/?cat=164\" rel=\"category\">Next.js<\/a> <a href=\"https:\/\/fromideatocreation.com\/?cat=133\" rel=\"category\">\u6548\u80fd<\/a>","qubely_excerpt":"\u9996\u5148\uff0c\u5b89\u88dd gray-matter\uff0c\u5b83\u53ef\u4ee5\u8b93\u6211\u5011\u89e3\u6790\u6bcf\u500b markdown \u6587\u4ef6\u4e2d\u7684 metadata\u3002","_links":{"self":[{"href":"https:\/\/fromideatocreation.com\/index.php?rest_route=\/wp\/v2\/posts\/1585","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fromideatocreation.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fromideatocreation.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fromideatocreation.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fromideatocreation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1585"}],"version-history":[{"count":1,"href":"https:\/\/fromideatocreation.com\/index.php?rest_route=\/wp\/v2\/posts\/1585\/revisions"}],"predecessor-version":[{"id":1614,"href":"https:\/\/fromideatocreation.com\/index.php?rest_route=\/wp\/v2\/posts\/1585\/revisions\/1614"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fromideatocreation.com\/index.php?rest_route=\/wp\/v2\/media\/1165"}],"wp:attachment":[{"href":"https:\/\/fromideatocreation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1585"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fromideatocreation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1585"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fromideatocreation.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1585"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}