рдкреНрд░рддрд┐-рдкреГрд╖реНрда рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдерд┐рд░ рдкреАрдврд╝реА рдФрд░ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рджреЛрдиреЛрдВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ Next.js рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдмрдирдиреЗ рджреЗрдВред
getStaticProps
- next build
рд╕рдордп рдкрд░ рд╕реНрдерд┐рд░ рдкреАрдврд╝реА (рдПрд╕рдПрд╕рдЬреА) рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВредgetServerSideProps
- рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ (SSR) рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВ рдЬреЛ рдСрди-рдбрд┐рдорд╛рдВрдб рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИредgetStaticPaths
- рд╕реНрдереИрддрд┐рдХ рдкреАрдврд╝реА (SSG) рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рдПрдВрдпрд╣ RFC рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ API рдкрд░рд┐рд╡рд░реНрдзрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ RFC рдХреЛрдИ рдмрд╣рд┐рд╖реНрдХрд░рдг рдирд╣реАрдВ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред
рд╡реЗрдмрд╕рд╛рдЗрдЯ рдпрд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ 2 рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ: рд╕реНрдЯреЗрдЯрд┐рдХ рдЬреЗрдирд░реЗрд╢рди (SSG) рдпрд╛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ (SSR)ред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Next.js рдЖрдкрдХреЛ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рддрд┐-рдкреГрд╖реНрда рдЪреБрдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Next.js 9 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, getInitialProps
рдмрд┐рдирд╛ рдкреЗрдЬ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ .html
рдкрд░ next build
.html
рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдмрдирд╛рддреЗ рд╕рдордп рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рдЗрдЯ рдХреЗ рд╕реАрдПрдордПрд╕ рдпрд╛ рдмреНрд▓реЙрдЧ рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рдкреЗрдЬреЛрдВ рдХреЛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ getInitialProps
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк SSR рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
Next.js рдХреЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ next export
рдХрдорд╛рдВрдб рд╣реИ, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ SSG рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ Next.js рдХреА рд╣рд╛рдЗрдмреНрд░рд┐рдб рдкреНрд░рдХреГрддрд┐ рдХреЛ рдЦреЛрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк next export
рд╕рд╛рде getInitialProps
рддреЛ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИред getInitialProps
рдирд┐рд░реНрдорд╛рдг рд╕рдордп (рдЬреЛ рдорд╣рд╛рди рд╣реИ) рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЬрдм рдЖрдк рдХрд╛ рдЙрдкрдпреЛрдЧ next/link
рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмреАрдЪ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП getInitialProps
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, next export
рдкрд░рд┐рдгрд╛рдоред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд (рд╕реАрдПрдордПрд╕ / рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ) рдХреЛ рд╕реАрдзреЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдбрд╛рдЙрди рд╣реИ, рддреЛ рдкреЗрдЬреЛрдВ рдХреЗ рдмреАрдЪ рдЪрд▓рддреЗ рд╕рдордп рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдордиреЗ рдПрд╕рдПрд╕рдЬреА рдХреЗ рднрд╛рд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ next export
рд╕рд╛рде рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдЬреИрд╕реЗ рд╣рд╛рд╢реАрдХреЙрд░реНрдк (рдзрдиреНрдпрд╡рд╛рдж @jescalan) рдХреЗ рд╕рд╛рде рд╕рд╣рдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рджреЛ рдирдП рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдмрд╛рдзрд╛рдУрдВ рдХреА рд╡реНрдпрд╛рдкрдХ рдЬрд╛рдВрдЪ рдХреА рд╣реИ: getStaticProps
рдФрд░ getServerSideProps
. рд▓реЗрдХрд┐рди рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рднреА рд╣реИ: getStaticPaths
( exportPathMap
рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЬреЛ рдкреНрд░рддрд┐ рдкреГрд╖реНрда рд╣реИ)ред
рдЗрди рдирдП рддрд░реАрдХреЛрдВ рдХреЗ getInitialProps
рдореЙрдбрд▓ рдкрд░ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдПрд╕рдПрд╕рдЬреА рдмрдирд╛рдо рдПрд╕рдПрд╕рдЖрд░ рдмрдирдиреЗ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрдВрддрд░ рд╣реИред
getStaticProps
рдирд┐рд░реНрдорд╛рдг рд╕рдордп (рдЬрдм next build
рдЪрд▓ рд░рд╣рд╛ рд╣реЛ) рдкрд░ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреГрд╖реНрда рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИgetStaticPaths
рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдПрдХ рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИgetServerSideProps
рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдкрд░ рдкреГрд╖реНрда рдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡рд░реНрддрдорд╛рди getInitialProps
рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИредрдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рдо рд╕рд╣реА рд╕рдВрджрд░реНрдн рд╡рд╕реНрддреБ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рддрд┐рдкрд╛рджрди рд░рдгрдиреАрддрд┐ рдЪреБрдирддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рд╕рд╣реА рдорд╛рди рдорд┐рд▓рддреЗ рд╣реИрдВ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ getInitialProps
рдЖрдкрдХреЛ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрд╕рдПрд╕рдЬреА рдмрдирд╛рдо рдПрд╕рдПрд╕рдЖрд░ рдкрд░ рдХреНрдпрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдХреЗ, рдпрд╣ рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЯреНрд░реЗрдб-рдСрдлрд╝ рдХреЛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдкреГрд╖реНрда рдШрдЯрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рд╣реИрдВ рдФрд░ getInitialProps
рд╕рдорд╛рди рдиреЗрд╕реНрдЯреЗрдб рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреАрдВред
getStaticProps
getStaticProps
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдирд┐рд░реНрдорд╛рдг рд╕рдордп (рдПрд╕рдПрд╕рдЬреА) рдкрд░ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рдирдИ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдЙрд╕ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧреА рдЬреЛ next build
рд╕рдордп рдкрд░ .html
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
Next.js рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ JSON рдлрд╝рд╛рдЗрд▓ рднреА рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ getStaticProps
рдХрд╛ рдкрд░рд┐рдгрд╛рдо next build
рд╕рдордп рдкрд░ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ next/link
рдпрд╛ next/router
, Next.js рдкреЗрдЬ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЙрдкреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ JSON рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рд╛рдПрдЧрд╛ред
рдЧреБрдг props
рдХреБрдВрдЬреА рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд▓реМрдЯрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдкреЗрд╢ рдХрд┐рдП рдЬрд╛ рд╕рдХреЗрдВред
// pages/index.js
// getStaticProps is only called server-side
// In theory you could do direct database queries
export async function getStaticProps(context) {
return {
// Unlike `getInitialProps` the props are returned under a props key
// The reasoning behind this is that there's potentially more options
// that will be introduced in the future.
// For example to allow you to further control behavior per-page.
props: {}
};
}
context
рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ:
params
- рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдЯ рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░редgetStaticPaths
рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП getStaticProps
рдЙрдкрдпреЛрдЧ рдкрд░ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИред
getStaticPaths
exportPathMap
рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐ рдкреГрд╖реНрда рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рдЖрдк рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╛рд▓реЗ url рдХреА рд╕реВрдЪреА рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ slug
рдиреАрдЪреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВред Next.js рдПрдХ getStaticPaths
рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдЬреЛ url рдХреА рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ async
рд╡рд┐рдзрд┐ рд╣реИ,
// pages/blog/[slug].js
// `getStaticProps` gets a `params` object holding the dynamic parameters
// For `/blog/hello-world` it would look like `{ slug: 'hello-world }`
export async function getStaticProps({ params }) {
return {
props: {}
};
}
// `getStaticPaths` allows the user to return a list of parameters to
// render to HTML at build time.
export async function getStaticPaths() {
return {
paths: [
// This renders /blog/hello-world to HTML at build time
{ params: { slug: "hello-world" } }
]
};
}
рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдкрд░ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╣рд░ рд╕рдВрднрд╡ рдорд╛рд░реНрдЧ рдХреЛ рдкреНрд░реА-рд░реЗрдВрдбрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓рд╛рдЦреЛрдВ рдЙрддреНрдкрд╛рдж рд╣реИрдВ)ред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ Next.js рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ fallback
рдкреГрд╖реНрда рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдЬреЛ рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдХреЗ рдкреГрд╖реНрда рдХрд╛ рдПрдХ рд░реЗрдВрдбрд░ рд╣реИ (рддрд╛рдХрд┐ рдПрдХ рд▓реЛрдбрд┐рдВрдЧ рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдИ рдЬрд╛ рд╕рдХреЗ) рдЬрдм рдкреГрд╖реНрда рдЕрднреА рддрдХ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред
рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдЯреАрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛:
рдпрджрд┐ рдЖрдк рдРрд╕реЗ рдкрде рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдП рдереЗ, рддреЛ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо 404 рд╣реЛрдЧрд╛ рдЬреЛ fallback: false
рд╕реЗ getStaticPaths
рд▓реМрдЯрд╛рдХрд░ рднреА рд╕рдВрднрд╡ рд╣реИред
// `getStaticPaths` allows the user to return a list of parameters to
// render to HTML at build time.
export async function getStaticPaths() {
return {
// Opt-out of the described fallback behavior
fallback: false,
paths: [
// This renders /blog/hello-world to HTML at build time
{ params: { slug: "hello-world" } }
]
};
}
getServerSideProps
getServerSideProps
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдкреГрд╖реНрда рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдПрд╕рдПрд╕рдЬреА) рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕рд░реНрд╡рд░ (рдПрд╕рдПрд╕рдЖрд░) рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдкрд░ рдСрди-рдбрд┐рдорд╛рдВрдб рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред
Next.js рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рднреА рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛ рдЬреЛ getServerSideProps
рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ next/link
рдпрд╛ next/router
, рддреЛ Next.js JSON рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдПрдХреНрд╕рдкреЛрдЬрд╝реНрдб рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рд▓рд╛рдПрдЧрд╛ рдЬреЛ рдкреЗрдЬ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╡рд┐рдзрд┐ рд╡рд░реНрддрдорд╛рди getInitialProps
, рдореБрдЦреНрдп рдЕрдВрддрд░ getServerSideProps
рдХреЗ рд╕рд╛рде рд╣рдореЗрд╢рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмрдЬрд╛рдп рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдпрд╛ рддреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд░ рдпрд╛ API рдлрд╝реЗрдЪ рдкрд░ред
рдЗрд╕реА рддрд░рд╣ getStaticProps
рд▓рд┐рдП рдЧреБрдг props
рдХреБрдВрдЬреА рдХреЗ рддрд╣рдд рд▓реМрдЯрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
// pages/index.js
// getServerSideProps is only called server-side
// In theory you could do direct database queries
export async function getServerSideProps(context) {
return {
// Unlike `getInitialProps` the props are returned under a props key
// The reasoning behind this is that there's potentially more options
// that will be introduced in the future.
// For example to allow you to further control behavior per-page.
props: {}
};
}
context
рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ:
params
- рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧ рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░req
- HTTP рдЕрдиреБрд░реЛрдз рд╡рд╕реНрддреБres
- HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╕реНрддреБquery
- рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)@timneutkens , @Timer , @ijjk , @lfades рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рддред @rauchg , @jescalan рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рд╕рд╣рдпреЛрдЧ рдХрд┐рдпрд╛
export async function getStaticProps(context) { return { // Unlike `getInitialProps` the props are returned under a props key // The reasoning behind this is that there's potentially more options // that will be introduced in the future. // For example to allow you to further control behavior per-page. props: {} }; }
рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдореЗрдВ props
рдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореБрдЭреЗ рдЗрди-рд▓рд╛рдЗрди рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг "рдкреНрд░рддрд┐ рдкреГрд╖реНрда рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдФрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП" рдереЛрдбрд╝рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рдорд┐рд▓рд╛ред
рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдХреНрдпрд╛ рдЙрд╕рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди getInitialProps
рдпрд╛ рд╕рд╛рде рдореЗрдВ рд╣реЛрдЧрд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдкреАрдЖрдИ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реЗрд╡рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкрд░, рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕реАрдзреЗ рдПрдкреАрдЖрдИ рд▓реЗрдпрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ SSR рдкрд░ рд╕рд░реНрд╡рд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЖрдЧреЗ рдЬрд╛рдХрд░, рдХреНрдпрд╛ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдкреВрд░реНрд╡ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛?
рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдореЗрдВ
props
рднреАрддрд░ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореБрдЭреЗ рдЗрди-рд▓рд╛рдЗрди рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг "рдкреНрд░рддрд┐ рдкреГрд╖реНрда рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдФрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП" рдереЛрдбрд╝рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рдорд┐рд▓рд╛ред
рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкреНрд░реВрдлрд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗред
рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдХреНрдпрд╛ рдЙрд╕рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
getInitialProps
рдпрд╛ рд╕рд╛рде рдореЗрдВ рд╣реЛрдЧрд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдкреАрдЖрдИ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реЗрд╡рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкрд░, рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕реАрдзреЗ рдПрдкреАрдЖрдИ рд▓реЗрдпрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ SSR рдкрд░ рд╕рд░реНрд╡рд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЖрдЧреЗ рдЬрд╛рдХрд░, рдХреНрдпрд╛ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдкреВрд░реНрд╡ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛?
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреБрдЫ рдХрдорд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд▓рдкреНрд░рдкрд╛рдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЬреЛ рджреБрдирд┐рдпрд╛ рднрд░ рдХреЗ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред getServerProps
рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрд╣ рд╡рд╛рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░!
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рд╣реИ ...
рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдореИрдВ рдЕрднреА рдХреА рдореЗрдЬрдмрд╛рдиреА рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдкрд╣рд▓реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рдВрдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд░ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рдлрд┐рд░, рдореИрдВ рд╕реАрдПрдордПрд╕ рдореЗрдВ рдХреБрдЫ рд╕рд╛рдордЧреНрд░реА рдмрджрд▓рддрд╛ рд╣реВрдВ рдФрд░ рдХреЗрд╡рд▓ рдПрд╕рдПрд╕рдЬреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред
рддреБрд░рдВрдд рдЕрд▓рд╛рд░реНрдо рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдЧрд░ рдореИрдВ рдмрд┐рд▓реНрдб рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:
1) рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдХреЛрдИ рдХреЛрдб рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ рдФрд░ рдмреНрд▓реИрдмреНрд▓рд╛ред
2) рдореИрдВ рдЗрд╕реЗ --force
рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЕрдм "рд╕рдм рдХреБрдЫ" рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрд╕рдПрд╕рдЬреА рдкреГрд╖реНрдареЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
_рдпреЗ рдХреЗрд╡рд▓ рдкрд░рд┐рдХрд▓реНрдкрдирд╛рдПрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрд╡рдпрдВ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ - рд╡реЗ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рддрдиреЗ рдЬрд╛рдЧрд░реВрдХ рд╣реИрдВ_
рдпрд╣ рд╢рд╛рдпрдж рдХрд┐рд╕реА рдЕрдиреНрдп рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдХреЗ рдмрд╛рдж рдореЗрдВ рд╣реА .next/cache
... рдпрд╣ рдЙрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреИрд╕реЗ рдЪрд▓реЗрдЧрд╛?
@joltmode рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИред .next/cache
рдЕрднреА рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рдмреАрдЪ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ (рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ https://zeit.co/blog/serverless-pre-rendering) рдХреЗ рд╕рд╛рде рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП getInitialProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рд╕реАрдбреАрдПрди рдкрд░ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдк getServerProps
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдорд╛рд▓ рд╣реИ, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдЧреНрд░рд╛рд╣рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдиреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИ getStaticProps рдФрд░ getServerProps рдХрд╛ рдирд╛рдордХрд░рдг, рдпрджрд┐ рд╡реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ {props} рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ *Props рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛? рд╢рд╛рдпрдж getStaticConfiguration, getStaticSetup, getStaticOptions рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдВрдЧреЗ?
@kibs рд╡рд╛рдкрд╕реА рдорд╛рди рд╣рдореЗрд╢рд╛ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдВрдЧреЗ рдХрд┐ рдкреНрд░реЛрдк рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдирд╛рдордХрд░рдг рдареАрдХ рд╣реИ рдЗрдореЛред
рдпрд╣ рдмрд╕ рдХрдорд╛рд▓ рд╣реИ! рдпрд╣ рд╣рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдФрд░ рдЬрд░реВрд░рдд рдХреЛ рд╣рд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдирд┐рдЬреА рдФрд░ рдкреЗрд╢реЗрд╡рд░ рджреЛрдиреЛрдВ рд╡реЗрдм рдРрдк рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕реЛрдЪ рд╕рдХрддрд╛ рдерд╛ред рдЖрдкрдиреЗ рдореБрдЭреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╣рд╛рдЗрдмреНрд░рд┐рдб рд╕рд╛рдЗрдЯ рдЬрдирд░реЗрдЯрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрд╛, рдзрдиреНрдпрд╡рд╛рдж!
рдореИрдВ рдкрд┐рдЫрд▓реЗ getInitialProps()
рдФрд░ exportPathMap()
рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрдиреЗ рдХреЗ рдирдП рддрд░реАрдХреЛрдВ рд╕реЗ рднреА рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреЛ рдореБрдЭреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдЬрдм рдореИрдВрдиреЗ Next.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ SSR / SSG рдореЗрдВ рдЦреБрджрд╛рдИ рдХреАред рдкреНрд░рддрд┐ рдкреГрд╖реНрда рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореБрдЭреЗ рднреА рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдЗрд╕реЗ рдЖрдЬрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛!
рдмрд╕ рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ: рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐
getServerProps()
рдореЗрдВcontext
рдкрд░рдо рдирд╣реАрдВ рд╣реИред
рдмрд╕ рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ: рдЖрдЦрд┐рд░реА рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ getServerProps() рдореЗрдВ рдПрдХ рд╕рдВрджрд░реНрдн рдкрд░рдо рдЧреБрдо рд╣реИред
рдлрд┐рдХреНрд╕реНрдб!
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ! рдореБрдЭреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ getStaticProps
, getStaticPaths
рдФрд░ getServerProps
рдкреГрд╖реНрда рдШрдЯрдХ рдкрд░ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ (рдЬреИрд╕реЗ getInitialProps
рдЗрд╕ рд╕рдордп) рд╣реЛрдЧрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЯрд╛рдЗрдк/рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛред
const Page: NextPage<Props> = (props) => ...
// Explicit types needed here
export const getStaticPaths: NextGetStaticPaths<Params> = () => ...
export const getStaticProps: NextGetStaticProps<Props, Params> = (context) => ...
export const getServerProps: NextGetServerProps<Props> = (context) => ...
export default Page
// vs.
const Page: NextPage<Props, Params> = (props) => ...
// Static method types come from NextPage<Props, Params>
Page.getStaticPaths = () => ...
Page.getStaticProps = (context) => ...
Page.getServerProps = (context) => ..
export default Page
@herrstucki рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдкрдврд╝реЗрдВ: рдЕрд╕рдВрднрд╡ рдХреЗ рдХрд░реАрдм)ред рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
@timneutkens рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ ... рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХреНрдпрд╛ рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдФрд░ рднреА рдЬреНрдпрд╛рджрд╛ рдорд╛рдпрдиреЗ рдирд╣реАрдВ
// This should all be removed in client-side code тАж
import {fetchQuery, queryTag} from 'big-data-fetching-lib';
const query = queryTag`...`
export const getStaticProps = async () => ({ props: await fetchQuery(query) })
// Only this should be included client-side
export default (props) => ...
@herrstucki рд╣рдо рдордЬрд╝рдмреВрддреА рд╕реЗ рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рд░рдЦрдиреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдХреНрдпрд╛ рдЙрд╕рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
getInitialProps
рдпрд╛ рд╕рд╛рде рдореЗрдВ рд╣реЛрдЧрд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдкреАрдЖрдИ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реЗрд╡рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкрд░, рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕реАрдзреЗ рдПрдкреАрдЖрдИ рд▓реЗрдпрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ SSR рдкрд░ рд╕рд░реНрд╡рд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЖрдЧреЗ рдЬрд╛рдХрд░, рдХреНрдпрд╛ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдкреВрд░реНрд╡ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛?рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреБрдЫ рдХрдорд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд▓рдкреНрд░рдкрд╛рдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЬреЛ рджреБрдирд┐рдпрд╛ рднрд░ рдХреЗ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
getServerProps
рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЬрд╝рд░реВрд░, рд▓реЗрдХрд┐рди рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рд░реНрд╡рд░ рдкрд░ рдЖрд░рдЯреАрдЯреА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдЙрд╕ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдПрд╕рдПрд╕рдЖрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реАрдбреАрдПрди/рдХреИрд╢ рд╕рд░реНрд╡рд░ рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рдХреИрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпреБрдЧрд▓ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдПрдХ рдЕрд▓рдЧ рдПрдкреАрдЖрдИ рдкрд░рдд (рд╡реЗрдм тАЛтАЛ/ рдРрдкреНрд╕ / рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рд╕рд░реНрд╡рд░ рдкрд░рдд рдХреЛ рдЙрдЪреНрдЪ рдЯреНрд░реИрдлрд╝рд┐рдХ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдЙрддрдирд╛ рдмрдбрд╝рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЗ рд╡реЙрдЯрд░рдлреЙрд▓ рдлрд╝реЗрдЪ рдХреА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рдиреЗрдХреНрд╕реНрдЯ рд╕рд░реНрд╡рд░ рдХреЛ SSR рд▓реЗрдпрд░ рдмрдирд╛рдо рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕реЗрдЯрдЕрдк рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓реЗрдЧреАред
рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдХреНрдпрд╛ рдЙрд╕рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
getInitialProps
рдпрд╛ рд╕рд╛рде рдореЗрдВ рд╣реЛрдЧрд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдкреАрдЖрдИ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реЗрд╡рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкрд░, рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕реАрдзреЗ рдПрдкреАрдЖрдИ рд▓реЗрдпрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ SSR рдкрд░ рд╕рд░реНрд╡рд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЖрдЧреЗ рдЬрд╛рдХрд░, рдХреНрдпрд╛ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдкреВрд░реНрд╡ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛?рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреБрдЫ рдХрдорд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд▓рдкреНрд░рдкрд╛рдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЬреЛ рджреБрдирд┐рдпрд╛ рднрд░ рдХреЗ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
getServerProps
рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредрдЬрд╝рд░реВрд░, рд▓реЗрдХрд┐рди рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рд░реНрд╡рд░ рдкрд░ рдЖрд░рдЯреАрдЯреА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдЙрд╕ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдПрд╕рдПрд╕рдЖрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реАрдбреАрдПрди/рдХреИрд╢ рд╕рд░реНрд╡рд░ рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рдХреИрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпреБрдЧрд▓ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдПрдХ рдЕрд▓рдЧ рдПрдкреАрдЖрдИ рдкрд░рдд (рд╡реЗрдм тАЛтАЛ/ рдРрдкреНрд╕ / рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рд╕рд░реНрд╡рд░ рдкрд░рдд рдХреЛ рдЙрдЪреНрдЪ рдЯреНрд░реИрдлрд╝рд┐рдХ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдЙрддрдирд╛ рдмрдбрд╝рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЗ рд╡реЙрдЯрд░рдлреЙрд▓ рдлрд╝реЗрдЪ рдХреА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рдиреЗрдХреНрд╕реНрдЯ рд╕рд░реНрд╡рд░ рдХреЛ SSR рд▓реЗрдпрд░ рдмрдирд╛рдо рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕реЗрдЯрдЕрдк рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓реЗрдЧреАред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЧрд▓рдд рд╕рдордЭ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реАрдбреАрдПрди рдкрд░ рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдбреАрдПрди рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ getInitialProps рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред
@timneutkens рдореИрдВрдиреЗ рдХреИрдирд░реА рдХреЗ рд╕рд╛рде рдЦреЗрд▓рд╛, рдХреБрдЫ babel-plugin-preval
рдХреЛрдб рдХреЛ getStaticProps
рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдореБрдЭреЗ fs
рд╕рд╛рде рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред
рдореИрдВ рдЕрдкрдиреА ./pages/blog/
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА .md рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╕рднреА рдкреЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд▓реЙрдЧ рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдмрдирд╛ рд╕рдХреВрдВ
import React from 'react';
import Link from 'next/link';
import fs from 'fs-extra';
const Index = ({ posts }) => (
<div>
Hello World. <Thing msg="hello" />
<Link href="/thing">
<a>About</a>
</Link>
{posts.map(p => (
<div key={p.title}>{p.title}</div>
))}
</div>
);
Index.getStaticProps = async () => {
const items = await fs.readdir('./pages/blog');
items.forEach(path => /* .... do some stuff ... */ )
return { props: { posts: items } };
};
export default Index;
рдпрд╣ рдХреЛрдб рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ:
Module not found: Can't resolve 'fs' in '/Users/jared/Downloads/nextjs-typescript-template/node_modules/fs-extra/lib'
рд░реИрдЬрд╝рд▓ рд╕реЗ рдЖрдИрдЖрдИрдЖрд░рд╕реА, рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рд╡реЗрдмрдкреИрдХ рдХреЗ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдЯрдмреНрд╕ (рдпрд╛ рдЗрд╕рдХреЗ рдЕрднрд╛рд╡) рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░ рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ рд░реИрдЬрд╝рд▓ рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рдерд╛ред
node: {
fs: "empty";
}
рдореИрдВрдиреЗ рдЗрд╕реЗ next.config.js рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рддреНрд░реБрдЯрд┐ рдХреЛ рджреВрд░ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ fs
/ fs-extra
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдкрде рдирд╣реАрдВ (рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ)ред рдЙрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
рдореЗрд░рд╛ рджреВрд╕рд░рд╛ рдкреНрд░рд╢реНрди, рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ getStaticProps
рдореЗрдВ рдЖрдпрд╛рдд рдмрдирд╛рдо рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рд╣реЛрдВрдЧреЗред рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рдирд╣реАрдВ рд╣реВрдВ, рддреЛ рдореЗрд░рд╛ рдЙрдкрд░реЛрдХреНрдд рд╕реНрдирд┐рдкреЗрдЯ fs-extra
рдХреЛ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдЖрдЗрд╕реЛрдореЙрд░реНрдлрд┐рдХ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ ??ред рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдЖрдпрд╛рдд рдХреЛ рдПрдХ рдЗрдирд▓рд╛рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореЗрдВ рдмрджрд▓рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛?
js
Index.getStaticProps = async () => {
const fs = require('fs-extra'); // only require when needed at SSG
const props = await fs.readdir('./pages/blog');
return { props: { posts } };
};
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЧрд▓рдд рд╕рдордЭ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реАрдбреАрдПрди рдкрд░ рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдбреАрдПрди рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ getInitialProps рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред
рдЖрд╣, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рддреБрдореНрд╣рд╛рд░рд╛ рдорддрд▓рдм рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд╣рд▓реА рдПрд╕рдПрд╕рдЖрд░ рдкреАрдврд╝реА рдкрд░ getServerProps
рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛рдПрдЧрд╛, рдПрдХ рд╕рд╛рдордЧреНрд░реА рдкрддрд╛ рдпреЛрдЧреНрдп рд╣реИрд╢ рдореЗрдВ рд╢рд╛рдпрдж рдпреВрдЖрд░рдПрд▓ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕реАрдбреАрдПрди рдкрд░ рдХреИрд╢ рдХрд░ рд╕рдХреЗрдВ? рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд╣рд╛ рдЧрдпрд╛ рдХреИрд╢ рдЧреИрд░ рдиреЗрдХреНрд╕реНрдЯ рдРрдкреНрд╕ (рдПрдВрдбреНрд░реЙрдЗрдб/рдЖрдИрдУрдПрд╕) рдФрд░ рдиреЗрдХреНрд╕реНрдЯ рдРрдкреНрд╕ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдПрдХ рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде, рдХреИрд╢ рдирд┐рдпрдВрддреНрд░рдг рдирд┐рд░реНрджреЗрд╢ рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЪреВрдВрдХрд┐ рдЕрдЧрд▓рд╛ рдбреЗрдЯрд╛ рдХреА рд╕реЗрд╡рд╛ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдЧреНрд░рд╣рдг рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрддреНрдкрдиреНрди рдбреЗрдЯрд╛ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдпрд╛ рдкреНрд░реЙрдкреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
@jaredpalmer рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/zeit/next.js/issues/9524#issuecomment -558628066 ( рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЯреНрд░реА-рд╢рдХреЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдЪрд┐рдВрддрд╛ рд╕рд╣рд┐рдд) рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдВрдбрд▓ рдХреЛрдб? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
pages/
foo.js
foo.data.js (<- exports getStaticProps etc.)
or:
pages/
foo.js
pages-data/
foo.js (<- exports getStaticProps etc.)
@jaredpalmer рдкреЗрдбрд╝ рд╣рд┐рд▓рд╛рдирд╛ рдЕрднреА рддрдХ рдХреИрдирд░реА рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЖрдк рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред Next.js рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдПрдХ рдкрд░рдо рдЖрдирдВрдж рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рд╣реИ, рдмрд╕ рд╣рд░ рдлреАрдЪрд░ рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдбрдмреЗрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ _reduce_ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИред
рдЗрд╕ рдЖрд░рдПрдлрд╕реА рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдЙрдкрдпреЛрдЧреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ рдЬреЛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рд╕реЗ рд╕рд╣рдордд рд╣реВрдБ:
"
getStaticPaths
рдПрдХexportPathMap
рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐ рдкреГрд╖реНрда рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред"
рдХреБрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдЬрд╛рдирдирд╛ рдпрд╛ рддреЛ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдпрд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдВрдЧреЗ:
рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рд╕рдВрднрд╡рддрдГ /entity-name/entity-id
рдФрд░ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк router.push('/customers/[customerId]', '/customers/baer')
рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрднреА рднреА рдПрдХ рдкрдХрдбрд╝ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд░реНрд╡, рдиреЗрдЯрд▓рд┐рдлрд╛рдИ, рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рд╕реЗрд╡рд╛ рджреЗрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреЗрдЬ-рд░реАрдлреНрд░реЗрд╢ рдкрд░ 404 рди рдорд┐рд▓реЗ рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрднреА рднреА exportPathMap
ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рд▓рдЧрднрдЧ рдПрдХ рдХреЛрдбрдмреЗрд╕ рд╕реЗ, рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ:
const buildServeConfig = redirects => {
const config = {
public: `dist`,
trailingSlash: true,
rewrites: redirects
};
const outputPath = `${__dirname}/serve.json`;
fs.writeFile(outputPath, JSON.stringify(config, null, 2), err => {
if (err) {
throw err;
}
// eslint-disable-next-line no-console
console.log(`Generated: ${outputPath}`);
});
};
...
exportPathMap: function(defaultPathMap, { dev, outDir }) {
const redirects = Object.entries(defaultPathMap)
// No need to create a redirect rule for `/dirname/` or `/dirname/index.html`
.filter(([url]) => url !== `/` && url !== `/index`)
.map(([url, { page }]) => ({
// Replaces /[customerId] with /:customerId
source: url.replace(/]/g, ``).replace(/\[/g, `:`),
destination: `${page}/index.html`
}));
// By default, the routes are sorted such that a route like `/order/:orderId`
// comes before `/order/new`. Since the `:orderId` portion of `/order/:orderId`
// is a wildcard, the route `/order/new` will be a match and consider `new`
// as a value for `:orderId`. To get past this, we sort the redirects by the
// number of parameters in ascending order.
const sortedRedirects = [...redirects].sort(
(currentRedirect, nextRedirect) =>
currentRedirect.source.split(`:`).length >
nextRedirect.source.split(`:`).length
);
buildServeConfig(sortedRedirects);
return defaultPathMap;
}
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрд░рдПрдлрд╕реА рдХрд┐рд╕реА рднреА рдПрдкреАрдЖрдИ рдХреЛ рд╣рдЯрд╛ рдпрд╛ рд╣рдЯрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдпрд╣ рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдмрд┐рд▓реНрдб рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдкрд╛рд░ рдХрд░рдХреЗ рдЗрди рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕реЗ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫрд╛ ecape рд╣реИрдЪ рд╣реИред рд▓реЗрдХрд┐рди, рдпрд╣ " getStaticPaths
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред"
рдлрд┐рд░ рд╕реЗ, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдЖрдкрдХреА рд╡рд┐рдЪрд╛рд░рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
рдХреНрдпрд╛
getStaticProps
/getStaticPaths
рдФрд░getServerProps
рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рд╣реИрдВ? рдпрд╛рдиреА рдХреНрдпрд╛ рдПрдХ рднрд╛рдЧ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рдФрд░ рдПрдХ рднрд╛рдЧ рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?
рд╣рд╛рдБ рд╡реЗ рдПрдХ рд╕реНрдерд┐рд░ рдкреАрдврд╝реА рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкреНрд░рддрд┐рдкрд╛рджрди рд╣реИред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдиреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░реЗрдВ, рдпрд╣ рдПрдХ рдмрдбрд╝реА рдЪреАрдЬрд╝ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ Gatsby рд╕реЗ рдпрд╛рдж рдЖрддреА рд╣реИ:
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЛрдиреЛрд▓рд┐рдерд┐рдХ (100 рдХреЗрдмреАрдПрд╕) рдЬреЗрдПрд╕рдУрдПрди рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдЬреЛ рдХрднреА рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред Gatsby рдореЗрдВ рд╣рдордиреЗ JSON рдлрд╝рд╛рдЗрд▓ рдХреЛ GraphQL рд╕реНрдХреАрдорд╛ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╡рд┐рд░реБрджреНрдз рдкреВрдЫрддрд╛рдЫ рдХреА, рдХреЗрд╡рд▓ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╣рдореЗрдВ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди/рд╕рд╛рдл рддрд░реАрдХрд╛ import monolith from './monolith.json'
, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрдкреВрд░реНрдг JSON рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдпрд╣ RFC 100% рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ Gatsby рдХреЗ рдЪрдордХрдиреЗ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ Gatsby рдХреЗ рд╕рд╛рде рдЕрдЧрд▓реЗ рдПрдХ рдХрджрдо рдХреЛ рдХрд░реАрдм рд▓рд╛рддрд╛ рд╣реИ (рдЬрд╛рд╣рд┐рд░ рд╣реИ, Gatsby рд░рдирдЯрд╛рдЗрдо SSR рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░ рдмрд┐рд▓реНрдбрдЯрд╛рдЗрдо рд░реЗрдВрдбрд░рд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ)
@timneutkens , RFC рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдореЗрд░реЗ рдкрд╛рд╕ Next.js рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ @rauchg рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХреА рд╣реИред
Next.js рдмрд╣реБрдд рд╣реА рд╕рд╣рдЬ DX рдФрд░ рдХреБрдЫ рдЙрдЪрд┐рдд рдЪреВрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЯреАрд╡реА рдРрдк рдХреЗ рд▓рд┐рдП Next.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реВрдВред
рд╕реНрдорд╛рд░реНрдЯ рдЯреАрд╡реА рдРрдк рд▓рдЧрднрдЧ рдХреНрд▓рд╛рд╕рд┐рдХ рд╡реЗрдм рдРрдк рд╣реИрдВ рдЬреЛ рдЯреАрд╡реА рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ:
рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдмрдВрдбрд▓ рдХреЛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЯреАрд╡реА рдбрд┐рд╡рд╛рдЗрд╕ рджреНрд╡рд╛рд░рд╛ рд╣реА рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреЛрдИ SSR рд╡рд┐рдХрд▓реНрдк рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ (рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП Node.js рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рдордиреЗ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдРрдк рд╣реА рдЧрддрд┐рд╢реАрд▓ рд╣реИ (рдХрд╣рддреЗ рд╣реИрдВ, рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕)ред
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдПрд╕рдкреАрдП рдЪрд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬреЛ рдПрдХ рд╕реНрдерд┐рд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ getServerProps
(рдпрд╛ getInitialProps
) рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ SSR рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред рд▓реЗрдХрд┐рди рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЗрд╕ рдЖрд░рдПрдлрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрднреА рддрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред @timneutkens , рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЛ рдХреЗрд╡рд▓ Next.js рдореЗрдВ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╕реБрдЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ Next.js рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж!
рдкреАрдПрд╕ рдореИрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдЕрд▓рдЧ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
@grushetsky рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрд░рдПрдлрд╕реА рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рдмрд╛рддреЛрдВ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдЕрд▓рдЧ рдкреНрд░рд╢реНрди рд╣реИ
@timneutkens рдЗрд╕ рдЖрд░рдПрдлрд╕реА рдХрд╛ рд╡рд╛рджрд╛ рдЙрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдкрд░ рдЙрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛! рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, getInitialProps
рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реЛрдЧрд╛, рд╣реИ рдирд╛?
рд╕рд╣реА @outdooricon -- getInitialProps
рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрдирд╛ рд░рд╣реЗрдЧрд╛ред
рдЖрд░рдПрдлрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░:
рдпрд╣ RFC рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ API рдкрд░рд┐рд╡рд░реНрдзрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ RFC рдХреЛрдИ рдмрд╣рд┐рд╖реНрдХрд░рдг рдирд╣реАрдВ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред
рдмрдврд╝рд┐рдпрд╛ RFC, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрддрд┐ рдЙрддреНрд╕рд╛рд╣рд┐рдд!
рдореИрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ getServerProps
рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ, рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реВрдВред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдкреАрдЖрдИ-рдПрдВрдбрдкреЙрдЗрдВрдЯ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдШрдЯрдХ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрд╛рд╣рд░реА рдХреИрд╢ рдЬреИрд╕реЗ рд░реЗрдбрдХреНрд╕, рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓-рдХреИрд╢ рдЖрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рддрд░реАрдХрд╛ рд╣реИ?
рдЕрдЧрд░ рдореИрдВ getInitialProps
рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдерд┐рд░ рдФрд░ рдПрд╕рд┐рдВрдХреНрд╕ рд╣реИ, рддреЛ рдЕрдЧрд▓реА рдмрд╛рд░ рдШрдЯрдХ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рд╡рд╣рд╛рдВ рдмрд╛рд╣рд░реА рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓рдиреЗ рджреЗрддрд╛ рд╣реИред рдпрд╣ getServerProps
рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдШрдЯрдХ рдЬреАрд╡рдирдЪрдХреНрд░ рдореЗрдВ рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рдЕрднреА рддрдХ рдХреИрд╢ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ , рднрд▓реЗ рд╣реА рд╡рд╣ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛ?
рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдкреВрдЫреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ getStaticProps
рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдореИрдВ
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд╣реАрдВ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдЬрдм рд╕рд╛рдордЧреНрд░реА рдХреИрд╢ рдХреА рдЬрд╛рддреА рд╣реИ рддреЛ рд╣рдо рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдбреАрдмреА рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдирдпрд╛ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирдпрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ! рдмрдврд╝рд┐рдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡, рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ exportPathMaps
рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд╕реБрдзрд╛рд░ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╢рдВрд╕рдиреАрдп рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА, рдореИрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд░реВрдЯ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рдкрд╛рдПрдВрдЧреЗред
рдХреНрдпрд╛ i18n рдкреНрд░реАрдлрд┐рдХреНрд╕реНрдб рд░реВрдЯреНрд╕ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ? рдореЗрд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рджреЗрд╢-рд▓реИрдВрдЧ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдФрд░ рдпреВрдЖрд░рдПрд▓ рд╡рд╛рд▓реЗ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдХреБрдЫ рд╣рдЬрд╛рд░реЛрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
/nl/brillen
/gb/glasses
/es/gafas
...
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ getStaticPaths
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрдм рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ рдЬрдм url рдХреЗ рд▓рд┐рдП рдЙрдкрд╕рд░реНрдЧ рд╕рд░реНрд╡рд╡рд┐рджрд┐рдд рд╣реЛ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ ( /blog/[id].js
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ getStaticPaths
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ рдпрджрд┐ рдЗрд╕реЗ рд░реВрдЯ рд╕реНрддрд░ рдкрд░ рдкрде рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдЙрдкрд╕рд░реНрдЧ (рджреЗрд╢-рд▓реИрдВрдЧ) рдФрд░ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкрде рдХреЗ рд╕рд╛рде?
@reaktivo pages/[lang]/blog/[id].js
-> getStaticPaths
рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА url рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
@timneutkens рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдЬрдм рдпрд╣ рдЙрдкрд▓рдмреНрдз/рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛?
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╣рдо рдИрдЯреАрдП рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдорд╛рдзрд╛рди рд╕рд╣реА рд╣реИ, рдЙрддреНрдкрд╛рджрди рдРрдкреНрд╕ рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рд╕реБрдзрд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореБрдЭреЗ рдореЗрд░реЗ "рдЬреЛ рдмрдирд╛рдП рдирд╣реАрдВ рд░рдЦрд╛" рдлреАрдиреЛрдорд┐рдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрд╕рдПрд╕рдЬреА рдЬреЛ рдореЗрд░реЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджреЗрдЧрд╛ред Next.js рдХреЛ рдЗрд╕ рд▓рд╛рдкрддрд╛ рднрд╛рдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛!
рдореИрдВ рдПрдХ рд╕рдВрджреЗрд╣ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕реАрдПрдордПрд╕ рдЬреИрд╕реЗ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, getStaticPaths рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдореИрдВ рд╕рднреА рдкреЛрд╕реНрдЯ рд▓рд╛рдКрдВрдЧрд╛ рдФрд░ рдПрдХ рд╕реВрдЪреА рдкрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдЬреИрд╕реЗ:
export async function getStaticPaths () {
return [
┬а┬а // This renders / blog / hello-world to HTML at build time
{params: {slug: "hello-world"}}
];
}
рд╕рд╛рдордЧреНрд░реА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреЛрд╕реНрдЯ рдХреЗ рд╕реНрд▓рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ getStaticProps рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ npm рдмрд┐рд▓реНрдб рдореЗрдВ рд╣реЛрдЧрд╛ред
рдореЗрд░рд╛ рдкреНрд░рд╢реНрди рдЙрди рдирдИ рдкреЛрд╕реНрдЯреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝реА рдЬрд╛рдПрдВрдЧреАред
рдХреНрдпрд╛ рдЗрд╕ рдирдИ рдкреЛрд╕реНрдЯ рдХреЛ рд╕реНрд▓рдЧ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП getStaticProps рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?
рдХреНрдпрд╛ рдЗрд╕ рдирдИ рдкреЛрд╕реНрдЯ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдмрд┐рд▓реНрдб рдХреА рддрд░рд╣ рдПрдХ .html рдлрд╝рд╛рдЗрд▓ рд╣реЛрдЧреА?
рдореБрдЭреЗ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдХреБрдЫ рднреА рд╕реАрдзреЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд░реНрдерди рдореБрдЭреЗ рдРрд╕рд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИ рдЬреЛ рдореЗрд░реЗ рдкреНрд░рд╢реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛред
рдЖрдк рдпрд╣рд╛рдВ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рд╡рд╣ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмреАрдЪ, рдореИрдВ webhooks рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ JAMSTACK рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП nextJS рдмрдирд╛рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВред
рдЕрдЧрд░ рдореБрдЭреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рдкреНрд░реЙрдкреНрд╕ рдорд┐рд▓рддрд╛ рд╣реИ рддреЛ рдореИрдВ рд╕рд░реНрд╡рд░-рд░реЗрдВрдбрд░ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
рдЕрдЧрд░ рдореИрдВ рдирд╣реАрдВ рдХрд░рддрд╛, рддреЛ рдореИрдВ рд╕рд┐рд░реНрдл CDNized рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкреНрд░реА-рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд╣реИ? рдФрд░ рдкреГрд╖реНрда рддрдм рддрдХ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд┐рдирд╛ рд░рд╣реЗрдЧрд╛ рдЬрдм рддрдХ XHR рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрдпрд╛ (рдЕрд▓рд╡рд┐рджрд╛ SEO)
рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдЬрд╛рдорд╕реНрдЯреИрдХ рдХрд╛ рдХреЛрдИ рдЪрд▓ рд░рд╣рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдФрд░ рд╣рдо рдиреЗрдЯрд▓рд┐рдлрд╛рдИ рдкрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдзрдиреНрдпрд╡рд╛рдж,
рдПрдВрдбреНрд░рд┐рдпрд╛рд╕
рдЕрд░реЗ @ScreamZ - рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдХреЛ nextjs рдХреЗ рд╕рд╛рде рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рд╣рдо рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП next export
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ nextjs рд╕рд╛рдЗрдЯ рдХреЛ рд╕реНрдерд┐рд░ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА getInitialProps
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред getStaticProps
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде, рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ -- getStaticProps
рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╕рднреА рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдПрдХ рдмрд╛рд░ рдлрд╝реЗрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓рд╛рдЗрд╡ рд╕рд╛рдЗрдЯ рдЬрдм рддрдХ рдЖрдк рдлрд┐рд░ рд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рддреЗред рдпрд╣ рдбреЗрдЯрд╛-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯреЛрдВ рдХрд╛ рдХреНрд▓рд╛рд╕рд┐рдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╣реИ, рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЛ рд╡реЗрдмрд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рд╣реЛрд╕реНрдЯ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ рдФрд░ рдЬрдм рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╣реЛрд╕реНрдЯ рдХреЛ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рдиреЗрдХреНрд╕реНрдЯрдЬ рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореМрдЬреВрджрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдФрд░ рдиреЗрдЯрд▓рд┐рдлрд╛рдИ рдкрд░ рдПрдХ рдиреЗрдХреНрд╕реНрдЯрдЬ рд╕рд╛рдЗрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рддреБрдЪреНрдЫ рд╣реИред рдореЗрд░реА рдХрдВрдкрдиреА рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╡рд░реНрддрдорд╛рди рдореЗрдВ nextjs рдкрд░ рдЪрд▓ рд░рд╣реА рд╣реИ, рдФрд░ netlify рджреНрд╡рд╛рд░рд╛ рд╣реЛрд╕реНрдЯ рдХреА рдЧрдИ рд╣реИ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред
рдпрд╣ рдмрд╣реБрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЬрд╝реАрдЯ рдХреА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рджреГрдврд╝рддрд╛ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг рдХрд╛рдлреА рд╕рдорд╛рди рд╣реИ, рдФрд░ рдиреЗрдХреНрд╕реНрдЯрдЬ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдирдХрд╛ рдПрдХреАрдХрд░рдг рдХрд┐рд╕реА рд╕реЗ рдкреАрдЫреЗ рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ рд╕рдЪрдореБрдЪ рдХреБрдЫ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдмрд╕ рдЬреАрдердм рдХреЛ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╝реАрдЯ рдХреА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдпрд╣ рдкрд╣рдЪрд╛рди рд▓реЗрдЧреА рдХрд┐ рдЖрдк рдиреЗрдХреНрд╕реНрдЯрдЬ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдФрд░ рддреИрдирд╛рдд рд╣реИрдВ рд╣рд░ рдЪреАрдЬрд╝ред
рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЬрд╝реАрдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛, рдмрд╕ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд░реНрдерди рд╣реИред рдЖрдк рдЗрд╕реЗ netlify рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХрдИ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдкреНрд░рдорд╛рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ nextjs рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ netlify рдкрд░ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА рдиреЗрдХреНрд╕реНрдЯрдЬ рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓, рд╕рдмрд╕реЗ рдлреБрд▓рдкреНрд░реВрдл рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЬрд╝реАрдЯ рдХреА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЛ рдЖрдЬрд╝рдорд╛ рджреВрдВрдЧрд╛ред
@jescalan рдЗрд╕ рдорд╣рд╛рди рд╕рд╛рдЭрд╛рдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж ЁЯЩПЁЯП╗
рдореБрдЭреЗ netlify рдХреЗ рд╕рд╛рде рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк Publish directory
рдХрд╛ рдЙрдкрдпреЛрдЧ out
рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди zeit Now рдкрд░, рдХрд╣рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдХреГрдкрдпрд╛ SSR рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди next export
рд╕рд╛рде рд╕реНрдЯреИрдЯрд┐рдХ рдкрд░ рдкреВрд░реНрдг рдЬрд╛рдПрдВред
@ScreamZ рдпрд╣ рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк "рдкреВрд░реНрдг рд╕реНрдереИрддрд┐рдХ" рд╕рд╛рдЗрдЯ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк zeit рдХреА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ рд╡рд╛рд▓реЗ рдЕрдкрдиреЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП getStaticProps
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЬреЛ рдорд┐рд▓реЗрдЧрд╛ рд╡рд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рд╡рд╣ next export
рди рдЪрд▓реЗ, рдХреНрдпреЛрдВрдХрд┐ getStaticProps
рд╕рднреА рдкреГрд╖реНрда
рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЬрд╝реАрдЗрдЯ рдХреА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкрд░ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ (рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЬрд╝реАрдЯ рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд╛рд▓реА рдХреЛрдИ рднреА рд╕рд╛рдЗрдЯ рдЬрд┐рд╕рдореЗрдВ exportPathMap
рдЪрд▓реЗрдВрдЧреЗ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдм рд╕рддреНрдп рдирд╣реАрдВ рд╣реИ)ред getStaticProps
рдкреЗрдЬ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ next export
рджреНрд╡рд╛рд░рд╛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреЗрдЬ -- рд╣рд░ рд╣рд┐рдЯ рдкрд░ рд╕реАрдбреАрдПрди рд╕реЗ рд╕реАрдзреЗ рдкреЗрдЬ рдХреА рдПрдХ рд╕реНрдЯреИрдЯрд┐рдХ рдХреЙрдкреА рджреА рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рдХреБрдЫ рдкреГрд╖реНрдареЛрдВ рдХреЛ getServerProps
рдпрд╛ getInitialProps
рд╕рд╛рде рднреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рд╕рд░реНрд╡рд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдкреГрд╖реНрдареЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЗрд╕реЗ рдПрдХ рд▓рд╛рдн рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ - рдпрджрд┐ рдПрд╕рдПрд╕рдЖрд░ рдорд╛рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЖрдк рдмрд╕ рдПрдХ рдЕрд▓рдЧ рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣ рдПрдХрд▓ рдорд╛рд░реНрдЧ рдЕрдм рдПрд╕рдПрд╕рдЖрд░ рд╣реИ, рдЬрдмрдХрд┐ рдЖрдкрдХреЗ рдЕрдиреНрдп рд╕рднреА рдорд╛рд░реНрдЧ рд╕реНрдерд┐рд░ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред
@jescalan рдзрдиреНрдпрд╡рд╛рдж,
рддреЛ рдмрд╕ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕ рдмреАрдЪ рд╕реНрдереИрддрд┐рдХ рдХреЗ рд▓рд┐рдП netlify рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ
рдХреНрдпрд╛ SSG рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдХрд╣рд╛рдиреА рд╣реИ? рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рдо рд╕рд╛рдЭрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдХреНрдпреВрдП/рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде next export
рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдпреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рди рдХреЗрд╡рд▓ getStaticProps
рдореЗрдВ рдкрдврд╝реЗ рдЬрд╛рдПрдВрдЧреЗред рдХреНрдпрд╛ рдпрд╣ рд╕реАрдзреЗ serverRuntimeConfig
рдпрд╛ publicRuntimeConfig
рдпрд╛ process.env
?
@ScreamZ @jescalan рдореИрдВ рдЕрдм @Timer (рд╡рд╣ рд╕рднреА рдХреНрд░реЗрдбрд┐рдЯ рдХреЗ рд╣рдХрджрд╛рд░ рд╣реИрдВ) рдХреЗ рд╕рд╛рде рдЕрдм рдЖрдЬ рдкрд░ рд╢реВрдиреНрдп-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди next export
рд╕рдорд░реНрдерди рдкрд░ рдЙрддрд░рд╛ рд╣реИред рддреБрдо рдХрд░ рд╕рдХрддреЗ рд╣реЛ:
"build": "next build && next export"
рдФрд░ рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИ
рд╣рд╛рдБ, рдореИрдВ рд╡рд╣ рд▓рдбрд╝рдХрд╛ рдерд╛ рдЬрд┐рд╕рдиреЗ рд╕рдорд░реНрдерди рдкрд░ рдкреВрдЫрд╛ рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдЗрд╕реЗ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ЁЯШЕ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА?
@ScreamZ рдирд╣реАрдВ, рдЖрдк рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ рдХреЗрд╡рд▓ next build && next export
рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
@timneutkens рдЕрдЧрд░ рдореИрдВ рдХреА рдЬрдЧрд╣ getInitialProps
рдХреЗ рд╕рд╛рде getServerProps
, рдореИрдВ рдЕрднреА рднреА рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ target: 'serverless'
рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Server Pre Rendering
? рдзрдиреНрдпрд╡рд╛рджред
рд╣рдо рдЗрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рд╣рдо рдЗрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП unstable_
рдЙрдкрд╕рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП unstable_getStaticProps
@timneutkens
@ScreamZ @jescalan рдореИрдВ рдЕрдм @Timer (рд╡рд╣ рд╕рднреА рдХреНрд░реЗрдбрд┐рдЯ рдХреЗ рд╣рдХрджрд╛рд░ рд╣реИрдВ) рдХреЗ рд╕рд╛рде рдЕрдм рдЖрдЬ рдкрд░ рд╢реВрдиреНрдп-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
next export
рд╕рдорд░реНрдерди рдкрд░ рдЙрддрд░рд╛ рд╣реИред рддреБрдо рдХрд░ рд╕рдХрддреЗ рд╣реЛ:"build": "next build && next export"
рдФрд░ рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИ
рдореЗрд░реА рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреБрдЫ рдФрд░ рдЪреАрдЬреЗрдВ рдХрд░ рд░рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
"build": "graphql codegen && next build && npm run export",
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ! рдпрд╣ рд╡рд╣реА рдерд╛ рдЬреЛ рдореИрдВ рдвреВрдВрдв рд░рд╣рд╛ рдерд╛ (рдЕрд▓рд╡рд┐рджрд╛ рдЧреИрдЯреНрд╕рдмреАрдЬреЗрдПрд╕, рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рдврд╛рдВрдЪрд╛ рдЕрдм рдЖрдкрдХреЗ рдЬреИрд╕рд╛ рдордЬрдмреВрдд рд╣реИ!)
рдРрд╕реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
рдореИрдВрдиреЗ 9.1.6
рднреА рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдФрд░ рдореИрдВрдиреЗ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдХрд┐
рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдзрд╛рдЧрд╛ рдПрдХ рдЖрд░рдПрдлрд╕реА рдерд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреБрд▓рд╛ рд╣реИ, рд╣реИ рдирд╛?
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ 9.1.6 рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВред
рдзрд┐рдХреНрдХрд╛рд░ рд╣реИ, рдореИрдВ рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдБ! рдореИрдВ
рдЕрдВрддрд┐рдо рдкреНрд░рд╢реНрди:
getInitialProps
рдХрд╛ рдмрд╣рд┐рд╖реНрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдпрд╛ рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ? рдПрдХ рдЙрджрд╛рд╣рд░рдг?next export
рдХреЛ рдХреЗрд╡рд▓ getStaticProps
рдФрд░ next build
рд╡рд╛рд▓реЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рднреА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?рдЙрд╕ рдмреЗрд╣рддрд░реАрди рдЯреВрд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж ЁЯЩПЁЯП╗
рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ getInitialProps рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдпрд╛ рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ? рдПрдХ рдЙрджрд╛рд╣рд░рдг?
рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд░рдПрдлрд╕реА рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ:
рдпрд╣ RFC рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ API рдкрд░рд┐рд╡рд░реНрдзрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ RFC рдХреЛрдИ рдмрд╣рд┐рд╖реНрдХрд░рдг рдирд╣реАрдВ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдзрд╛рдЧрд╛ рдПрдХ рдЖрд░рдПрдлрд╕реА рдерд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреБрд▓рд╛ рд╣реИ, рд╣реИ рдирд╛?
рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдЗрд╕реЗ ZEIT рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рдЖрдЬрд╝рдорд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рджреГрд╢реНрдпрддрд╛ рд╕рд░рдлреЗрд╕рд┐рдВрдЧ рдкрд╣рд▓реЗ рд╣реА рдЙрддрд░ рдЪреБрдХреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЧрдП рдкреЗрдЬ рдЯреНрд░реА)ред
рдЕрдЧрд▓реЗ рдирд┐рд░реНрдпрд╛рдд рдХреЛ getStaticProps рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд▓реЗ рдирд┐рд░реНрдорд╛рдг рд╡рд╛рд▓реЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдареАрдХ рд╣реИ, рдЖрдо рддреМрд░ рдкрд░ рдЖрдк next export
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред рдЗрд╕реЗ рдмреИрдХрд╡рд░реНрдб рдХреЙрдореНрдкрд┐рдЯрд┐рд╢рди рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЗрдзрд░-рдЙрдзрд░ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЖрдк рдПрдХ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдРрдк рдмрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдПрдкреАрдЖрдИ рд░реВрдЯ рдЬреИрд╕реА рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд╕рднреА рд▓рд╛рдн рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдкреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИред
рд╣рдо рдЗрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
unstable_
рдЙрдкрд╕рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
unstable_getStaticProps
рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдЕрднреА рддрдХ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдпрд╣ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╣реИ рдФрд░ рд░рд┐рд▓реАрдЬ рдХреЗ рдмреАрдЪ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред
рддреЛ рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдкреЗрдЬ рдбреЗрдЯрд╛ рдпреБрдХреНрдд JSON рдлрд╝рд╛рдЗрд▓ рд╣рдореЗрд╢рд╛ рджреВрд╕рд░реЗ рдкреЗрдЬ рд╕реЗ рдПрд╕рдПрд╕рдЬреА рдкреЗрдЬ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред
рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧ JSON рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░реАрд▓реЛрдбрд┐рдВрдЧ рдЕрдиреБрдХреВрд▓рди рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ?
рд╢рд╛рдпрдж рдЗрд╕реЗ рдкреНрд░реАрд▓реЛрдб рдХрд░рдирд╛ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреГрд╖реНрда рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ (рдпрд╛рдиреА: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдПрд╕рдПрд╕рдЬреА рд▓рд┐рдВрдХ рд╣реЛрд╡рд░ рдХрд░ рд░рд╣рд╛ рд╣реЛ) рдпрд╛ рдкреНрд░реАрд▓реЛрдбрд┐рдВрдЧ рдЬреИрд╕реЗ рдЖрдк рд▓рд┐рдВрдХ рдШрдЯрдХ рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдЕрдиреНрдп рдЬреЗрдПрд╕ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреНрд░реАрд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╡реИрд╕реЗ рдЙрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкреНрдпрд╛рд░ рдХрд░рдирд╛!
рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧ JSON рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░реАрд▓реЛрдбрд┐рдВрдЧ рдЕрдиреБрдХреВрд▓рди рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ?
рд╣рд╛рдВред
рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЗрди funcs рдХреЗ рдкреЗрдбрд╝-рд╣рд┐рд▓рд╛рдиреЗ рдпреЛрдЧреНрдп рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд▓рд┐рдП рд╣реВрдВред
рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдЗрд╕рдХреЗ рдЕрд╡рд░реЛрдзрдХ рдХреНрдпрд╛ рд╣реИрдВ?
@mikestopcontinues рдЗрд╕ RFC рдХрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реА рдЯреАрдо рдФрд░ рдХреБрдЫ рдЪреБрдирд┐рдВрджрд╛ рднрд╛рдЧреАрджрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрддреНрдпрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк unstable_
рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ! рдореИрдВ
рдХреГрдкрдпрд╛ рдЙрддреНрдкрд╛рджрди рдХрд╛рд░реНрдпрднрд╛рд░ рдХреЛ рдирдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрднреА рднреА рдПрдкреАрдЖрдИ рдХреЛ рдмреНрд░реЗрдХрд┐рдВрдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕реЗ 8 рд╕реЗ 20K рдкреГрд╖реНрдареЛрдВ рддрдХ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯреЛрдВ рдХреА рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдХреБрдЫ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдХреБрдЫ рдЧрддрд┐рд╢реАрд▓ рдЕрдиреБрд░реЛрдз рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде)ред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЕрднреА рдкрд░ 10K рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реАрдорд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░), рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рд╢рд░реНрдо рдЖрддреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ getStaticPaths рд╡рд┐рдзрд┐ рдХреЗ рдмрд┐рдирд╛, рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирдГ рд▓реЛрдб рдкрд░ getStaticProps рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреЛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рдХреЙрд▓ json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд▓рд╛ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдЗрдВрдХреНрд░реАрдореЗрдВрдЯрд▓ рдмрд┐рд▓реНрдб рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ? рддреЛ рдХреЗрд╡рд▓ рдирдИ/рдмрджрд▓реА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк
unstable_
рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ!
рдореИрдВ unstable_getServerProps
рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ zeit/next.js
рд░реЗрдкреЛ рдореЗрдВ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ?
рдХреНрдпрд╛ рдЗрдВрдХреНрд░реАрдореЗрдВрдЯрд▓ рдмрд┐рд▓реНрдб рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ? рддреЛ рдХреЗрд╡рд▓ рдирдИ/рдмрджрд▓реА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ (рди рд╣реА рдЗрд╕ RFC рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ)ред
рдирд┐рд╢реНрдЪрд┐рдВрдд рд░рд╣реЗрдВ, рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдЗрд╕рдХреА рдЦреЛрдЬ рдХрд░реЗрдВрдЧреЗред
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ getStaticProps
рдкреНрд░рддрд┐ рдкреГрд╖реНрда рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдирд╣реАрдВ!
рдореИрдВ рдЕрд╕реНрдерд┐рд░_рдЧреЗрдЯрд╕реЗрд╡рд░рдкреНрд░реЙрдкреНрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ [...]
getServerProps
рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ!
getServerProps
рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ!
рд╕рд░ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рд╡рд╣ рднреВрдорд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ _bunch_ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рдПрдХрд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ! рдореИрдВ
рдХреГрдкрдпрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ, рдореИрдВ 100% рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ getServerProps
/ getStaticProps
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред
рдЗрд╕ рд╕реВрддреНрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд: рдирд╣реАрдВ
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдЯрд░реНрдорд┐рдирд▓ рдиреЗ рдЗрд╕рдХрд╛ рд╕рдВрдХреЗрдд рдХреНрдпреЛрдВ рджрд┐рдпрд╛ рдЬрдм рдореИрдВрдиреЗ next build
рдЪрд▓рд╛рдпрд╛, рдЕрдЧрд░ рд╡реЗ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ? рд╕рдВрджреЗрд╢ рджреЗрдЦрдХрд░ рдореБрдЭреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдереАрдВ, рдФрд░ рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрд╛ рдХрд┐ рд╡реЗ рдирд╣реАрдВ рдереЗред рдмрд╕ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдпрд╛ рдЕрдЧрд░ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЧрд▓рдд рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВред
╬╗ (Server) server-side renders at runtime (uses getInitialProps or getServerProps)
тЧЛ (Static) automatically rendered as static HTML (uses no initial props)
тЧП (SSG) automatically generated as static HTML + JSON (uses getStaticProps)
(рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг 9.1.6 рдкрд░)
рдзрдиреНрдпрд╡рд╛рдж
@stevenjchang рд╡реЗ pages/**/*.js
рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
export function unstable_getStaticPaths() {} // return [{params: {...}}, ...]
export function unstable_getStaticProps({params: {...}) {} // return {props: {...}}
рдФрд░ рдореБрдЭреЗ рдпрд╣ рднреА рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡реЗ рдЕрджреНрднреБрдд рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдЕрднреА рднреА рджреЗрд╡ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдереЛрдбрд╝реЗ рдореЛрдЯреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдЕрднреА рднреА рджреЗрд╡ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдереЛрдбрд╝реЗ рдореЛрдЯреЗ рд╣реИрдВред
@mikestopcontinues
рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдХрд┐рд╕реА рдФрд░ рдиреЗ рд╣рдореЗрдВ рджреЗрд╡ рд╕рд░реНрд╡рд░ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреА рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ!
@ рдЯрд┐рдорд░ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирдИ рдПрдкреАрдЖрдИ рдкрд╕рдВрдж рд╣реИред рджреЗрд╡ рдХреЗ рджреМрд░рд╛рди рдореЗрд░рд╛ рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рд░ рд▓реЛрдб рдкрд░ рдЬрд╕рди рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдЗрдЯ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рднреА рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред
"рд╣рд░ рд▓реЛрдб рдкрд░" рд╕реЗ рдЖрдкрдХрд╛ рдорддрд▓рдм рдкреЗрдЬ рд▓реЛрдб рд╕реЗ рд╣реИ? рдпрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг? рдпрд╛...?
@mmmef рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рд╣реА рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ json рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рджреЛ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмреАрдЪ рдЖрдЧреЗ-рдкреАрдЫреЗ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рддреЗ рд╣реИрдВред
@mikestopcontinues рдпрд╣ рдЗрдЪреНрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдмрд╕реЗ рдЕрджреНрдпрддрд┐рдд рдбреЗрдЯрд╛ рдЕрдХреНрд╕рд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдирдП рдореБрджреНрджреЗ рдореЗрдВ рдХреБрдЫ рдмреЗрд╣рддрд░ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдВрдЧреЗ!
@timneutkens рдпрд╣ RFC рдмрд╣реБрдд рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╢реНрди/рдЪрд┐рдВрддрд╛рдПрдВ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЖрдЗрдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдорд▓рд╛ рд▓реЗрдВ рдЬреЛ SSR рдФрд░ SSG рджреЛрдиреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ (рдЙрд░реНрдл "рдРрдк") рдкрд░ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЙрди рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рдПрдХ рдмреАрдбреАрдбреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рд╣реИред
рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИрдВ, рдХреБрдЫ рдирд┐рдЬреА рд╣реИрдВ (рдпрд╛рдиреА: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдИрдореЗрд▓/рдкрд╛рд╕рд╡рд░реНрдб)ред
рдРрдк рджреЛ рдЪрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рд╣рдо SSR рдФрд░ SSG рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
рдпрд╣ рдкрд░рд┐рджреГрд╢реНрдп рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрд╕рдПрд╕рдЬреА рдЙрдкрдпреЛрдЧ рдХреЗ рдкреНрд░рдореБрдЦ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ (рдЖрдИрдПрдордПрдЪрдУ) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░реЛрдбрдХреНрд╢рди рдРрдк рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдРрдк рдХреЗ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред
рдЖрдк рдЗрд╕реЗ рдХрдм рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдкреНрд░рдореБрдЦ рдЕрджреНрдпрддрди (v10), рдпрд╛ рдкрд┐рдЫрдбрд╝рд╛-рд╕рдВрдЧрдд рдЕрджреНрдпрддрди рд╣реЛрдЧрд╛?
рдЕрд░реЗ,
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрд┐рд╕реА рдХрд╕реНрдЯрдо рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рдЙрджрд╛рд╣рд░рдг:
// server.js
const express = require('express');
const next = require('next');
const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
app.prepare().then(() => {
const server = express();
server.get('/blog/:id', (req, res) => {
console.log('My params needed be passed to page:', req.params);
return app.render(req, res, '/blogDetail', { id: req.params.id });
});
server.listen(port, err => {
if (err) throw err;
console.log(`> Ready on http://localhost:${port}`);
});
});
// blogDetail.js
export async function unstable_getStaticProps(props) {
console.log('What is passed', props);
return {};
}
const BlogPostPage = ({ post }) => {
return <div>Hey</div>;
}
export default BlogPostPage;
# Terminal output
My params needed be passed to page: { id: 'test' }
What is passed { params: undefined }
рдХреНрдпреЛрдВ рдирд╣реАрдВ getStaticProps
рдореЗрдВ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИ? рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рд╣реИ рдЬрд┐рд╕реЗ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдмрд┐рдирд╛ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрд╕рдПрд╕рдЖрд░ рдХрд░рдирд╛ рд╣реИред useRouter
рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрдИ рдкреБрди: рд░реЗрдВрдбрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреНрд╡реЗрд░реА рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рд╣реИред рдпрд╣ рдПрдХ рдРрд╕рд╛ рдкреГрд╖реНрда рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реВрдкрд╛рдВрддрд░рдг рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдПрдХ рдЧреИрд░-рд╢реБрд░реБрдЖрддрдХрд░реНрддрд╛ рд╣реИред
@pjaws RFC рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ getStaticProps
рд╕реНрдерд┐рд░ рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рд╣реИред рд╕реНрдЯреЗрдЯрд┐рдХ рдПрдЪрдЯреАрдПрдордПрд▓ рдПрдХ рдХреНрд╡реЗрд░реАрд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдлрд┐рд░ рдпрд╣ рдбрд╛рдпрдирд╛рдорд┐рдХ URL рдкреИрд░рд╛рдореАрдЯрд░ рдХреНрдпреЛрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдпрд╣ рдХреИрд╕реЗ рдЕрд▓рдЧ рд╣реИ?
рдордВрдЧрд▓рд╡рд╛рд░, 14 рдЬрдирд╡рд░реА, 2020 рдХреЛ рдкреВрд░реНрд╡рд╛рд╣реНрди 1:30 рдмрдЬреЗ рдЯрд┐рдо рдиреНрдпреВрдЯрдХреЗрдиреНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:
@pjaws https://github.com/pjaws RFC рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ
getStaticProps рд╕реНрдерд┐рд░ рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рд╣реИред рд╕реНрдЯреЗрдЯрд┐рдХ HTML рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ a
рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧред-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/zeit/next.js/issues/9524?email_source=notifications&email_token=AMVRRIQCKDJNF4MPWSLYNV3Q5WA2NA5CNFSM4JRPBEL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63issueLNMWW74239T
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AMVRRIRJXLYC4MC4U7DH7NDQ5WA2NANCNFSM4JRPBELQ
.
рдХреНрдпреЛрдВрдХрд┐ getStaticPaths
рдЖрдкрдХреЛ рдЙрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рдпреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдмрд╣реБрдд рд╣реА рдЖрд╢рд╛рдЬрдирдХ, рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рд▓рдЧрддреЗ рд╣реИрдВ! рдореИрдВ
рдореИрдВ рдкреГрд╖реНрдареЛрдВ рдкрд░ рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рдбреЗрдЯрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getInitialProps
рдореЗрдВ _app.js
рд╣реЛрдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛)ред рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ getStaticProps
рдХрд╛ рдЙрд╕реА рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ? рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
рдореИрдВ рдкреГрд╖реНрдареЛрдВ рдкрд░ рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рдбреЗрдЯрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _app.js рдореЗрдВ getInitialProps рд╣реЛрдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛)ред рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ getStaticProps рдХрд╛ рдЙрд╕реА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ? рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
рд╕рд╣реА рд╣реИ, рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдпрд╣ рдХреЗрд╡рд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред рдмрд╛рдж рдореЗрдВ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдерд┐рд░ HTML рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп _app рдХреЗ getInitialProps рдХреЛ рдЕрднреА рднреА рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк getStaticProps рдкрд░ рдмрдврд╝рддреЗ рдЬрд╛ рд╕рдХреЗрдВред
рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ, рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрди - рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЗрд▓рд╛рдЬ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрднреА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдПрдХ рд╣реЗрдбрд▓реЗрд╕ рд╕реАрдПрдордПрд╕ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдпрд╛ рдЧреНрд░рд╛рдлрд╕реАрдПрдордПрд╕ рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╕реНрдерд┐рд░ рдПрдЪрдЯреАрдПрдордПрд▓ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдпреВрдЖрд░рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рджреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рд╣реИрдВ - рдХрд┐ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ - рд╕рдВрдкрддреНрддрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдПрдЪрдЯреАрдПрдордПрд▓ рдмрдирд╛рдПрдВ (рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ) рдФрд░ рдлрд┐рд░ рдПрдХ рд╕реАрдбреАрдПрди рдХреЛ рд╕рд╛рдордиреЗ рд░рдЦреЗрдВред рдпрд╣ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЕрднреНрдпрд╛рд╕ рд╣реИред
рдпрд╣ Netlify рдЬреИрд╕реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ - рдЬрд┐рд╕рдореЗрдВ DatoCMS рдпрд╛ Graphcms рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪрд╛ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИред рддреЛ рдЕрдЧрд░ рдореИрдВ рддреИрдирд╛рддреА рдХреЗ рд░реВрдк рдореЗрдВ Netlify рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдм рдХреБрдЫ Netlify рдбреЛрдореЗрди рд╕реЗ рдкрд░реЛрд╕рд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рдЕрдкрдирд╛ рдЬрд╛рджреВ рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВред
@sandys рдЕрдЧрд░ рдореИрдВ https://github.com/zeit/next.js/issues/9054#issuecomment -570427085 рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рддреЛ рдЖрдкрдХреЛ рд╕рдВрдкрддреНрддрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреА рд╣реЛрдЧреА, рдЙрдиреНрд╣реЗрдВ .next/static
рддрд╣рдд рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ getStaticProps
ред
рд╕реНрдерд┐рд░ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧ рд░рдЦрдиреЗ рдХрд╛ рднреА рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреИрд╢рд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
@Janpot рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╡рд╣рд╛рдВ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЛ рд░реЛрд▓-рдпреЛрд░-рдУрди рд╣реЛрдирд╛ рд╣реИред
рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдмрд┐рд▓реНрдЯ-рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдЕрдиреБрд░реЛрдз рдЬреЛрдбрд╝реЗрдВред рд╢рд╛рдпрдж # 9054 рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ SSG рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЕрддреНрдпрдВрдд рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдореИрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛, рд▓реЗрдХрд┐рди SSG рдХреЗ рд▓рд┐рдП рдПрд╕реЗрдЯ рд╣реИрд╢рд┐рдВрдЧ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧреАред
@ рд╣реЛрдореЛрдХреА , рдЙрд╕ рдХрд╛рдо рдХреЛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рдмреАрдЪ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдХреА рд╣реИ?
@ рд╣реЛрдореЛрдХреА , рдЙрд╕ рдХрд╛рдо рдХреЛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рдмреАрдЪ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдХреА рд╣реИ?
рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдпреЛрдЬрдирд╛ рднреА рдирд╣реАрдВ рд╣реИ: #10071
рдореИрдВ
@sandys рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдЬрдм рдЖрдк https://github.com/zeit/next.js/issues/9081 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП /images
рд╕реЗ рд╕реАрдПрдордПрд╕ рдореЗрдВ рдПрдХ рдкреБрдирд░реНрд▓реЗрдЦрди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ZEIT рдЕрдм рд╕рд╣реА рд╣реЗрдбрд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд░ рджреЗрдЧрд╛, рдЕрддрд┐рд░рд┐рдХреНрдд рдбрд╛рдЙрдирд▓реЛрдбрд┐рдВрдЧ (рдмрд┐рд▓реНрдб рдкрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдУрд╡рд░рд╣реЗрдб) рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
@timneutkens рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рддреЛ рд╣рдо netlify рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдХреНрдпрд╛ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдо CMS url рдХреЛ рдРрд╕реЗ рд╣реА рд░рдЦреЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдКрдкрд░ CDN рдХреА рдПрдХ рдкрд░рдд рд╕рд╛рдордиреЗ рд░рдЦреЗрдВ?
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ netlify (рдХреНрд▓рд╛рдЙрдбрдлреНрд░рдВрдЯ рдЬрд┐рд╕реЗ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ) рдЗрди рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдмрд╛рдз рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддреИрдирд╛рддреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреВрд░реА рд╕рдорд╕реНрдпрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЖрдзрд╛рд░ рдпреВрдЖрд░рдПрд▓ рд╕реЗ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдбреАрдПрди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ (рдЬреЛ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрд╕ 3 рд╕реЗ рдкрд░реЛрд╕рд╛ рдЬрд╛рдПрдЧрд╛)ред
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди Zeit Now рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЭ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ
рдпрджрд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддреИрдирд╛рддреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреВрд░реА рд╕рдорд╕реНрдпрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЖрдзрд╛рд░ рдпреВрдЖрд░рдПрд▓ рд╕реЗ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдбреАрдПрди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ (рдЬреЛ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрд╕ 3 рд╕реЗ рдкрд░реЛрд╕рд╛ рдЬрд╛рдПрдЧрд╛)ред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ 10x рдзреАрдорд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди Zeit Now рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЭ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ
рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣рд░ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЙрдбрдлреНрд░рдВрдЯ рд╕рд╣рд┐рддред
@timneutkens рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рд╣реИрдВред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ (рдЬреНрдЮрд╛рдд рдЖрдзрд╛рд░ url рд╕реЗ рдкрд░реЛрд╕реА рдЬрд╛ рд░рд╣реА рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рд╕рд╣рд┐рдд), рдЗрд╕реЗ рдмрд┐рд▓реНрдб рдореЗрдВ рдмреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЕрддреНрдпрдзрд┐рдХ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред
рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рдд рдХреА рд╡рдХрд╛рд▓рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЪрд╛рд▓реВ рдХрд░реЗрдВред рд╕реАрдПрдордПрд╕ рд╕реЗ рдбреАрдкрд▓рд┐рдВрдХ рдХрд░рдиреЗ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЦреБрд╢ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдЙрдЪреНрдЪ рдЯреНрд░реИрдлрд┐рдХ рд╕рд╛рдЗрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдЬреИрд╕реА рд╕рд╛рдЗрдЯреЛрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ред рд╣рдореЗрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реАрдПрдордПрд╕ рдХрд┐рд╕ рдпреВрдЖрд░рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Datocms рд╕реЗ рдХреА рд╕реЗрд╡рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ www.datocms-assets.com/ ред рд╣рдо #9081 рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?
рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреЗ рдкреНрд░рддрд┐ рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рд╣реИрдВред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ
рдпрд╣ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ (рдЬреНрдЮрд╛рдд рдЖрдзрд╛рд░ url рд╕реЗ рдкрд░реЛрд╕реА рдЬрд╛ рд░рд╣реА рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рд╕рд╣рд┐рдд), рдЗрд╕реЗ рдмрд┐рд▓реНрдб рдореЗрдВ рдмреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЕрддреНрдпрдзрд┐рдХ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ, рдЖрдк рдПрдХ рдкреБрдирд░реНрд▓реЗрдЦрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ /images/*
рдХреЛ cms url рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП www.datocms-asset.com/*
рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗред рдФрд░ рдлрд┐рд░ /images
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдВрдХ рдХрд░реЗрдВред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдСрдл-рдЯреЙрдкрд┐рдХ рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛ рд░рд╣рд╛ рд╣реИред
@sandys рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк # 9081 рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг/рдЫрд╡рд┐рдпреЛрдВ рд╕реЗ рд╕реАрдПрдордПрд╕ рдореЗрдВ рдПрдХ рдкреБрдирд░реНрд▓реЗрдЦ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ZEIT рдЕрдм рд╕рд╣реА рд╣реЗрдбрд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд░ рджреЗрдЧрд╛, рдЕрддрд┐рд░рд┐рдХреНрдд рдбрд╛рдЙрдирд▓реЛрдбрд┐рдВрдЧ (рдмрд┐рд▓реНрдб рдкрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдУрд╡рд░рд╣реЗрдб) рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
@timneutkens рдмрд╕ рдореЗрд░реЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЖрджрд░реНрд╢ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдк рдЫрд╡рд┐ рдХреЛ рд╣реИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдпреВрдЖрд░рдПрд▓ рдХреЗ рддрд╣рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕рд╛рдордЧреНрд░реА рдирд┐рд░реНрдорд╛рддрд╛ рдЬрдм рдЪрд╛рд╣реЗрдВ рд╕реАрдПрдордПрд╕ рдореЗрдВ рдЙрд╕реА рдирд╛рдо рдХреЗ рддрд╣рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЬрд┐рд╕ рд╕реЗрдЯрдЕрдк рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдореЗрдВ рд╕реАрдПрдордПрд╕ рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛:
getStaticProps
рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИрдЬреЛ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реЗрдЯрдЕрдк рд╣реИред
@Janpot CMS рдкреНрд░рджрд╛рддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЫрд╡рд┐рдпреЛрдВ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп url рджреЗрдХрд░ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред
рдпрд╣ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред
рдлрд┐рд░, рдореИрдВ рдпрд╣рд╛рдБ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдБред рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрдИ рдЕрдиреБрд░реЛрдз рд╣реИрдВред рдореИрдВ рдЖрдкрд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдЧреИрдЯреНрд╕рдмреА рд╕рд╛рдЗрдб рдкрд░ рднреА - https://github.com/gatsbyjs/gatsby/issues/14076
https://github.com/njosefbeck/gatsby-source-stripe/#downloading -files
@sandys рдпрд╣ SSG RFC рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЗрд╕рд▓рд┐рдП рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рднреА рджрд┐рдорд╛рдЧреЛрдВ рдореЗрдВ, рдпрд╣ рдПрд╕рдПрд╕рдЬреА рд╕реЗ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдЪреВрдВрдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдЬреА рдирд┐рд░реНрдпрд╛рдд рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рдорд╛рдорд▓рд╛ рд╣реИред рдЖрдо рддреМрд░ рдкрд░ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдорд╛рдорд▓рд╛ рдЕрдЧрд▓реЗ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рджреМрд░рд╛рди рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдирд╛ рд╣реИред
рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЕрдкрдиреЗ рдирд┐рд░реНрдгрдп рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░реЗрдВред
рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ next export
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдИ рдмрд╛рдд рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдЗрд╕ RFC рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
рдпрд╣ getServerProps
рдФрд░ рдСрди-рдбрд┐рдорд╛рдВрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
@Janpot CMS рдкреНрд░рджрд╛рддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЫрд╡рд┐рдпреЛрдВ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп url рджреЗрдХрд░ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред
рд╣рд╛рдБ, рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдФрд░ рдХреИрд╢реНрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ 2 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдФрд░ рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭреВрдВ, рддреЛ file-loader
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА CSS рдХреЗ рд▓рд┐рдП рд╢рд╛рдорд┐рд▓ рд╣реИред рдХреНрдпрд╛ рдпрд╣ JS рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ?
@Janpot рд╕рдВрджреАрдк рдиреЗ рдЬрд┐рд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рдВрджреБ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпреВрдЖрд░рдПрд▓ рдмрд╛рд╣рд░реА рд╕реНрд░реЛрдд рд╕реЗ рдЖрдПрдЧрд╛, рди рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗред рдлрд╝рд╛рдЗрд▓-рд▓реЛрдбрд░ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдПрдХ рдЕрд▓рдЧ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рд╣реИред
рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ ZEIT Now рдореЗрдВ рддреИрдирд╛рдд рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рдирдП рд╕реНрдерд┐рд░ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЧрддрд┐рд╢реАрд▓ URL рд╡рд╛рд▓рд╛ рдкреГрд╖реНрда рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрди рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ unstable_getStaticPaths
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди unstable_getStaticProps
404 рд▓реМрдЯрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреГрд╖реНрда рд╣реИ /blog/[slug].js
, рдЬрд┐рд╕рдХрд╛ getStaticPaths
рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ:
[{ params: { slug: 'hello' } }]
рдФрд░ рдореЗрд░реЗ getStaticProps
рдореЗрдВ рд╕реНрд▓рдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реНрдХ рд╣реИрдВред рдЬрдм рдореИрдВ /blog/hello
рдкрд░ рдЬрд╛рддрд╛ рд╣реВрдВ, рддреЛ рдкреГрд╖реНрда рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ /blog/doesnt-exist
рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЕрдорд╛рдиреНрдп рдкреГрд╖реНрда рдкрд░ рдЬрд╛рддрд╛ рд╣реВрдВ, рддреЛ getStaticProps
рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп 500 рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ a 404. рдпрд╛ рдпрджрд┐ рдореИрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ рдкреГрд╖реНрда getStaticPaths
рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, 404 рдХреЗ рдмрдЬрд╛рдп рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рддрд░реНрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ?
рдпрд╣ рдПрдХ рдорд╣рд╛рди рд╕реБрдзрд╛рд░ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдмрд╕ рдХреБрдЫ рдкреНрд░реА-рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдереЗред
рдореИрдВрдиреЗ рдЕрдкрдиреА рдПрдХ рд╕рд╛рдЗрдЯ рдХреЛ рдЕрдЧрд▓реЗ 9.2 рдкрд░ unstable_getStaticPaths
рдФрд░ unstable_getStaticProps
рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕рдиреЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред
exportPathMap
рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╣реИ: exportPathMap
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрде рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
{
"/path/to/page": {page: "/index", query: { pageId: 123 } }
}
рдФрд░ рд╕реНрдерд┐рд░ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдЧрд╛
/path
/to
/page
index.html
рдЬрдм рдЖрдк рдЯреЗрдореНрдкрд▓реЗрдЯ [slug].jsx
unstable_getStaticPaths
рд╕реЗ рд╕рдорддреБрд▓реНрдп рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ,
[{ slug: '/path/to/page' }]
рдЕрдЧрд▓рд╛ 9.2 рдиреЗрд╕реНрдЯреЗрдб рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп '%2Fpath%2Fto%2Fpage' рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
/%2Fpath%2Fto%2F
index.html
рд╣рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг (рдореМрдЬреВрджрд╛ ExportPathMap рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛) рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╣рдо рдПрдХ рдПрдХрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдкрде рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдиреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
@dpfavand рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдк рдПрдХ рдХреИрдЪ-рдСрд▓ рд░реВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ: https://nextjs.org/blog/next-9-2#catch -all-dynamic-routes
рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЬрдм рдЖрдк рд╕реНрд▓реИрд╢ рд╕рд╣рд┐рдд рдкрде рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди [slug].js
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╣реА рд╣реИ, рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк [...slug].js
ред
рдЗрд╕рдХреЗ рдХрдм рдЙрддрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ? рдХреНрдпрд╛ рдпрд╣ 9.2 рдХреЗ рдкреИрдЪ рдореЗрдВ рд╣реЛрдЧрд╛ рдпрд╛ рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдЧрд╛?
рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдкреНрд░рддрд┐ рдЙрддреНрд╕рд╛рд╣ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдХрд╣реАрдВ рдФрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдордпрд╕реАрдорд╛ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рд╕рд╣реА рдбреЗрд╡рд▓рдкрд░ рдЕрдиреБрднрд╡, рдмрд╛рдзрд╛рдПрдВ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдкреНрд░рдорд╛рдг рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ, рдпрд╣ рдорд╛рдореВрд▓реА рд╣реЛрдЧреАред
рд╣рд╛рдБ, рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдБ рд▓реЗрдХрд┐рди 9.1.7 рдмреНрд▓реЙрдЧ рдиреЗ рдЫрд╛рдк рдЫреЛрдбрд╝реА
рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрдВрдЧрд▓реА рдореЗрдВ рдерд╛ред
рд╢реБрдХреНрд░, резрен рдЬрдирд╡рд░реА, реирежреиреж рдХреЛ рд╢рд╛рдо рел:режрел рдмрдЬреЗ рдЯрд┐рдо рдиреНрдпреВрдЯрдХреЗрдиреНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:
рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдкреНрд░рддрд┐ рдЙрддреНрд╕рд╛рд╣ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЙрд▓реНрд▓реЗрдЦрд╛рдиреБрд╕рд╛рд░
рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ рдкрд░ рд╣рдо рдЖрдорддреМрд░ рдкрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдордпрд╕реАрдорд╛ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рд╕рд╣реА рдбреЗрд╡рд▓рдкрд░ рдЕрдиреБрднрд╡, рдмрд╛рдзрд╛рдПрдВ рдФрд░ рднрд╡рд┐рд╖реНрдп рд╣реИ
рд╕рдмреВрдд-рдиреЗрд╕ред-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/zeit/next.js/issues/9524?email_source=notifications&email_token=ADKINGF724256WCEFHBFIH3Q6ITRXA5CNFSM4JRPBEL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJ57N5133
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ADKINGBVCG6MFMOG5U2FGMDQ6ITRXANCNFSM4JRPBELQ
.>
рд▓реИрд╕рд┐рдЯрд░ рдЧреНрд░реЗрдЧ
[email protected] [email protected]
рд╕реЗрд▓ (832) 495-9903
рдХреНрдпрд╛ getStaticProps
рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рддрд┐ рдкреГрд╖реНрда рдХреЗ рдмрдЬрд╛рдп рдкреВрд░реЗ рдРрдк рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЪрд▓рддрд╛ рд╣реИ?
рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрджрд░реНрдн ( PricingPlansContext
) рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдкреГрд╖реНрдареЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдбреЗрдЯрд╛ (рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг рдпреЛрдЬрдирд╛рдПрдВ) рдореЗрд░реЗ рдмрд╛рд╣рд░реА рд╕рд░реНрд╡рд░ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░, рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдП ( next export
)ред рдХрднреА рднреА рд░рдирдЯрд╛рдЗрдо рдкрд░ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рд╕реЗ getStaticProps
рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдКрдкрд░ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдЯрд┐рдкреНрдкрдгреА рдорд┐рд▓реА: https://github.com/zeit/next.js/issues/9524#issuecomment -574179540ред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП babel
plugin-preval` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рд▓реЛрдЧреЛрдВ рдХреЛ a . рд▓рд┐рдЦрддреЗ рд╣реБрдП рднреА рджреЗрдЦрд╛ рд╣реИ
json рдлрд╝рд╛рдЗрд▓ ExportPathMa () рдХреЗ рднреАрддрд░ next.config.js рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕реЗ рд╡реЗ рддрдм рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ
рдЙрдирдХреЗ рдХреЛрдб рдХреЗ рднреАрддрд░ред
рдореИрдВрдиреЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдирдкреАрдПрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЬреЗрд╕рди рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд░реНрдпрд╛рддрдкрд╛рде рдореИрдк рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░ рдЬрдЧрд╣ рд╣реИред
@dpfavand рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдк рдПрдХ рдХреИрдЪ-рдСрд▓ рд░реВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ: https://nextjs.org/blog/next-9-2#catch -all-dynamic-routes
рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЬрдм рдЖрдк рд╕реНрд▓реИрд╢ рд╕рд╣рд┐рдд рдкрде рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди
[slug].js
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╣реА рд╣реИ, рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк[...slug].js
ред
@timneutkens рдлреЙрд▓реЛ-рдЕрдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рджреЛ рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реНрд▓рдЧ рдорд╛рди рдХреЛ getStaticPaths
рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ getStaticProps
рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╕реНрд▓рдЧ рдорд╛рди рдХреЛ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╕рдордп, рдмрд┐рд▓реНрдб рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рди рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреЗрд╕ 1, рдлрд╝рд╛рдЗрд▓ рдХреЛ pages/[...slug].jsx
рдорд╛рдирддреЗ рд╣реБрдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд▓рдЧ рдХрд░реЗрдВ:
export async function unstable_getStaticPaths() {
return [{ params: { slug: 'en/about' } }];
}
export async function unstable_getStaticProps({ params }) {
console.log('params', params);
return { slug: params.slug };
}
рдЙрдкрд░реЛрдХреНрдд рдорд╛рдорд▓реЗ рдореЗрдВ, params
рдореЗрдВ getStaticProps
рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рд╣реИ - рдХреЛрдИ slug
рдХреБрдВрдЬреА рдирд╣реАрдВред
рдХреЗрд╕ 2, pages/[...slug].jsx
, рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд▓рдЧ,
export async function unstable_getStaticPaths() {
const allPaths = Object.keys(pathMap).map(slug => ({ params: { slug } }));
return [{ params: { slug: ['en', 'about'] } }];
}
export async function unstable_getStaticProps({ params }) {
console.log('params', params);
return { slug: params.slug };
}
рдорд╛рдорд▓реЗ 2 рдореЗрдВ, рдмрд┐рд▓реНрдб рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ
> Build error occurred
{ Error: A required parameter (slug) was not provided as a string.
at _validParamKeys.forEach.validParamKey (/project/node_modules/next/dist/build/utils.js:21:569)
at Array.forEach (<anonymous>)
at toPrerender.forEach.entry (/project/node_modules/next/dist/build/utils.js:21:495)
at Array.forEach (<anonymous>)
at Object.isPageStatic (/project/node_modules/next/dist/build/utils.js:17:122)
at process._tickCallback (internal/process/next_tick.js:68:7) type: 'Error' }
рдореБрдЭреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП getStaticPaths
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдкрде рдкреИрд░рд╛рдореАрдЯрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдПрд╕рдПрд╕рдЬреА рдкрдереЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
/store/widgets/circles-n-squares?sort=price&minWeight=2&color=black
рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдИ-рдХреЙрдорд░реНрд╕ рд╕рд╛рдЗрдЯ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдПрдХ рдпреВрдЖрд░рдПрд▓ рдХреЗ pathname
рдореЗрдВ рдЙрддреНрдкрд╛рдж рдЦреЛрдЬ рдХреЗ рд╣рд░ рдПрдХ рдкрд╣рд▓реВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред
рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдпрд╣рд╛рдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИ - рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, getStaticProps
getServerProps
рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрдм рдХреЛрдИ рд╕рд╛рдЗрдЯ ZEIT Now рдкрд░ рддреИрдирд╛рдд рдХреА рдЬрд╛рддреА рд╣реИ (рдпрд╛рдиреА getStaticPaths
рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ) - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ?
@dpfavand рдореИрдВ рднреА рд╕рдЯреАрдХ рдЪреАрдЬрд╝ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ! рд╕реАрдПрдордПрд╕ рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рдкреЗрдЬ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЪрдкрд▓рддрд╛ рд╕реАрдПрдордПрд╕ рдФрд░ рдиреЗрдХреНрд╕реНрдЯрдЬреЗ рдХреЗ рд▓рд┐рдП рдПрдХ
@timneutkens рдлреЙрд▓реЛ-рдЕрдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рджреЛ рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реНрд▓рдЧ рдорд╛рди рдХреЛ
getStaticPaths
рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп, рдпрд╣getStaticProps
рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИредрдХреЗрд╕ 1, рдлрд╝рд╛рдЗрд▓ рдХреЛ
pages/[...slug].jsx
рдорд╛рдирддреЗ рд╣реБрдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд▓рдЧ рдХрд░реЗрдВ:export async function unstable_getStaticPaths() { return [{ params: { slug: 'en/about' } }]; } export async function unstable_getStaticProps({ params }) { console.log('params', params); return { slug: params.slug }; }
рдЙрдкрд░реЛрдХреНрдд рдорд╛рдорд▓реЗ рдореЗрдВ,
params
рдореЗрдВgetStaticProps
рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рд╣реИ - рдХреЛрдИslug
рдХреБрдВрдЬреА рдирд╣реАрдВред
рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдЫреЛрдЯреА рд╕реА рджреБрдирд┐рдпрд╛! Fastr_conf рдкрд░ рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред
рд╣рд╛рдп @timneutkens ,
рдореИрдВ next.js рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдЬрдирд░реЗрдЯрд░ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдВред
рдореИрдВ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ getStaticProps
рдФрд░ getStaticPaths
рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╡рд┐рднрд┐рдиреНрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдПрдкреАрдЖрдИ-рдЖрдзрд╛рд░рд┐рдд рд╕реАрдПрдордПрд╕ рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрд╕рдбреАрдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓рд╛рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд╛рдЗрдЯ рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред
const entries = await cmsSdkCient.getEntries();
рдЕрдм рддрдХ, рдореИрдВ рд╕реАрдПрдордПрд╕ рд╕реЗ рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП exportPathMap
рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрди рдкреЗрдЬреЛрдВ рдХреЗ рдкрде рдФрд░ рдЙрдирдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рдирдХреНрд╢рд╛ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред exportPathMap
рдлрд╝рдВрдХреНрд╢рди рджреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
ssr: true
рд╕рд╛рде рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдирдХреНрд╢рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдирд┐рд░реНрдпрд╛рдд рд╕рдордп рдкрд░ getInitialProps
рджреНрд╡рд╛рд░рд╛ рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИssr: false
, init-props.json
рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рдкрде рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдлрд┐рд░, рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ getInitialProps
рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдорд┐рд▓рд╛рди рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХреЗ init-props.json
рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредnext.config.js
exportPathMap
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░
module.exports = {
exportTrailingSlash: true,
exportPathMap: (defaultPathMap, { outDir }) => {
// load data from CMS
const objects = await cmsSdkCient.getEntries();
// create map between page paths and page data
return objects.reduce((accum, object) => {
// if the object does not have a slug, it is not a page
if (!object.slug) return accum;
const pagePath = '/' + object.slug;
const ssrQueryData = Object.assign({ ssr: true }, object);
const clientQueryData = Object.assign({ ssr: false }, object);
// generate the map for export phase with {ssr: true}
accum[pagePath] = {
// using additional fields from the page object,
// the pageFromPagePath() computes which page file should
// be used to render the page object
page: pageFromPagePath(object),
query: ssrQueryData
};
// write json files that will be loaded by client
if (outDir) {
const jsonFilePath = path.join(outDir, _.trim(pagePath, '/'), 'init-props.json');
fse.outputFileSync(jsonFilePath, JSON.stringify(clientQueryData));
}
return accum;
}, {});
}
}
рдкреЗрдЬ/my_page.js
getInitialProps
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
Index.getInitialProps = async (context) => {
const ssr = _.get(context, 'query.ssr', false);
if (ssr) {
// we are on server, return the data
return _.get(context, 'query', {});
} else {
// we are on client side, request the data through /init-props.json endpoint
const url = context.asPath + '/init-props.json';
return fetch(url).then(response => {
return response.json();
});
}
};
рдореИрдВ getStaticProps
рдФрд░ getStaticPaths
рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдмрдбрд╝рд╛ рд▓рд╛рдн рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ JSON рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдХреЛ рдХрдо рдХрд░ рджреЗрдЧрд╛ред
// pages/my_page.js
export async function getStaticProps(context) {
const objects = await cmsSdkCient.getEntries();
const props = _.find(object, { type: 'my_page' })
return { props };
}
// pages/blog/[slug].js
export async function getStaticProps(context) {
const objects = await cmsSdkCient.getEntries();
const props = _.find(object, { type: 'post', slug: context.params.slug })
return { props };
}
export async function getStaticPaths() {
const objects = await cmsSdkCient.getEntries();
return objects
.filter(object => object.type === 'post')
.map(object => ({ params: { slug: object.slug } }))
}
рдореБрдЭреЗ рдХреНрдпрд╛ рдкрд░реЗрд╢рд╛рдиреА рд╣реИ, рдпрд╣ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдореИрдВ рд╣рд░ рдмрд╛рд░ getStaticProps
рдпрд╛ getStaticPaths
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдмрд╛рд░ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓, рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрд╕рдПрд╕рдЬреА рдФрд░ рджреВрд░рд╕реНрде рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣реИрдВ, рдпрд╣ рдкреВрдЫрдиреЗ рд▓рд╛рдпрдХ рд╣реИред рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ next.js рджреЗрд╡ рдореЛрдб рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдХреЛрдИ рдХреИрд╕реЗ next.js рдХреЛ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рджреВрд░рд╕реНрде рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рд╕рд╛рдЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
@smnh рдЪреВрдВрдХрд┐ рдпрд╣ "рд╕рд┐рд░реНрдл рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ" рд╣реИ, рдЖрдк рдПрдХ рдмрд╛рд░ рдЕрдкрдиреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреГрд╖реНрда рдХреА getStatic* рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдиреЗрдЯрд╡рд░реНрдХ рдлрд┐рд░ рд╕реЗ рд╣рд┐рдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЬрд╣рд╛рдБ рддрдХ рдЖрдкрдХреЗ рджреВрд╕рд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдкреНрд░рд╢реНрди рд╣реИ, рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред next dev
рдЪрд▓рд╛рдПрдВ рдФрд░ рдЖрдк рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
рдореБрдЭреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП
getStaticPaths
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдкрде рдкреИрд░рд╛рдореАрдЯрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдПрд╕рдПрд╕рдЬреА рдкрдереЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:/store/widgets/circles-n-squares?sort=price&minWeight=2&color=black
рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдИ-рдХреЙрдорд░реНрд╕ рд╕рд╛рдЗрдЯ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдПрдХ рдпреВрдЖрд░рдПрд▓ рдХреЗ
pathname
рдореЗрдВ рдЙрддреНрдкрд╛рдж рдЦреЛрдЬ рдХреЗ рд╣рд░ рдПрдХ рдкрд╣рд▓реВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ ssg рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред SSG рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ - рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред (рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛?) рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рджреГрд╢реНрдп рдХреЛ рдкреНрд░реАрд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ (рдпрджрд┐ рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкрд╣рд▓реВ рд╡рд╛рд▓реЗ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ) рдФрд░ рдЕрдиреБрд░реЛрдз рдкрд░ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдиреЗ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рдПрд╕рдПрд╕рдЬреА рдЖрд░рдПрдлрд╕реА рд╕реЗ рдкрд░реЗ рдПрдХ рдореБрджреНрджрд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИред
@dpfavand рдореИрдВ рднреА рд╕рдЯреАрдХ рдЪреАрдЬрд╝ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ! рд╕реАрдПрдордПрд╕ рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рдкреЗрдЬ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЪрдкрд▓рддрд╛ рд╕реАрдПрдордПрд╕ рдФрд░ рдиреЗрдХреНрд╕реНрдЯрдЬреЗ рдХреЗ рд▓рд┐рдП рдПрдХ
@timneutkens рдлреЙрд▓реЛ-рдЕрдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рджреЛ рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реНрд▓рдЧ рдорд╛рди рдХреЛ
getStaticPaths
рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп, рдпрд╣getStaticProps
рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдХреЗрд╕ 1, рдлрд╝рд╛рдЗрд▓ рдХреЛpages/[...slug].jsx
рдорд╛рдирддреЗ рд╣реБрдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд▓рдЧ рдХрд░реЗрдВ:export async function unstable_getStaticPaths() { return [{ params: { slug: 'en/about' } }]; } export async function unstable_getStaticProps({ params }) { console.log('params', params); return { slug: params.slug }; }
рдЙрдкрд░реЛрдХреНрдд рдорд╛рдорд▓реЗ рдореЗрдВ,
params
рдореЗрдВgetStaticProps
рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рд╣реИ - рдХреЛрдИslug
рдХреБрдВрдЬреА рдирд╣реАрдВредрдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдЫреЛрдЯреА рд╕реА рджреБрдирд┐рдпрд╛! Fastr_conf рдкрд░ рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред
рдЕрд░реЗ! Nextjs рдЯреАрдо рдиреЗ рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рд╡рд░реНрддрдорд╛рди рдХреИрдирд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд┐рдХрдЯ рдЦреБрд▓рд╛ рд╣реИ: https://github.com/zeit/next.js/issues/10190
@smnh рдореИрдВ рдЬреЛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рд╕рд╛рдЭрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ
рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ Netlify рдмрд┐рд▓реНрдб рд╣реБрдХ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ CMS рдореЗрдВ рд╡реЗрдмрд╣реБрдХ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВред GetStaticProps рддрдм рдХреЗрд╡рд▓ рдкреГрд╖реНрда рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж @zeusdeux
рдкреБрдирдГ:
рдЬрд╣рд╛рдБ рддрдХ рдЖрдкрдХреЗ рджреВрд╕рд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдкреНрд░рд╢реНрди рд╣реИ, рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рджреЗрд╡ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЖрдк рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рд╣реИрдВред
рдЕрдЧрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреИрд╢ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рд╕реАрдПрдордПрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдмрджрд▓рддрд╛ рд╣реВрдВ, рддреЛ рдХреИрд╢ рдХреИрд╕реЗ рдЕрдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ dev
рджреНрд╡рд╛рд░рд╛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди next.js рдХреЛ рд░реЛрдХреЗ рдмрд┐рдирд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдП рдмрд┐рдирд╛ :)
рдЕрдЧрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреИрд╢ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рд╕реАрдПрдордПрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдмрджрд▓рддрд╛ рд╣реВрдВ, рддреЛ рдХреИрд╢ рдХреИрд╕реЗ рдЕрдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░
dev
рджреНрд╡рд╛рд░рд╛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди next.js рдХреЛ рд░реЛрдХреЗ рдмрд┐рдирд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдП рдмрд┐рдирд╛ :)
getStaticPaths
рдХреЗрд╡рд▓ рдПрдХ рдЙрддреНрдкрд╛рджрди рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдХреЗрд╡рд▓ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реЗрдЪрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрд░реЗ, рдореИрдВрдиреЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рдХрд┐ рдХреЛрдИ рднреА рдЙрд╕реА рдореБрджреНрджреЗ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛ред
рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдорд╛рд░реНрдЧреЛрдВ рдкрд░ рдПрдХ рд╣реА рдкреГрд╖реНрда рд╣реИ unstable_getStaticProps
:
1. /providers/[category]/[city]
2. /providers/[category]
рд╕реНрд░реЛрдд рдХреЛрдб рджреЛрдиреЛрдВ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рддреЛ рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдХреЗрд╡рд▓ export { default } from './[city]';
рдЬреИрд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ рдХрд┐ getStaticProps рд╕реЗ рдбреЗрдЯрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рдЕрдЧрд░ рдореИрдВ рджреЛрдиреЛрдВ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдХреЛрдб рдХреЛ рд╣рд╛рд░реНрдбрдХреЙрдкреА рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@homoky рдЖрдкрдХреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
export { default, unstable_getStaticProps } from './[city]';
рдореИрдВ рдПрд╕рдПрд╕рдЬреА рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рднрд╛рдЧреНрдп рдХреЗ рдмрд┐рдирд╛ред
рдПрд╕рдПрд╕рдЬреА рдореЗрдВ v9.2.1 рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдХреЛрдб рдиреАрдЪреЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
function Page({ stars }) {
return <div>Next stars: {stars}</div>
}
Page.unstable_getStaticProps = async ctx => {
return { props: { stars: 5 } }
}
export default Page
next build
рд╕реЗ рдореЗрд░рд╛ рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
Page Size First Load
тФМ тЧЛ / 354 B 72.1 kB
...
╬╗ (Server) server-side renders at runtime (uses getInitialProps or getServerProps)
тЧЛ (Static) automatically rendered as static HTML (uses no initial props)
тЧП (SSG) automatically generated as static HTML + JSON (uses getStaticProps)
@joostmeijles unstable_getStaticProps
рдХреЛ рдкреГрд╖реНрда рдШрдЯрдХ рд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
export const unstable_getStaticProps = async () => {
return {
props: { stars: 5 }
}
}
@joostmeijles
unstable_getStaticProps
рдХреЛ рдкреГрд╖реНрда рдШрдЯрдХ рд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПexport const unstable_getStaticProps = async () => { return { props: { stars: 5 } } }
рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдЗрд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдХреЛрдИ рдЗрд╕рдХрд╛ рдПрдХ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдХрд╛рдордХрд╛рдЬреА рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдХреИрдЪ-рдСрд▓ рд░реВрдЯ рдХреЗ рд╕рд╛рде рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреЗрдЬ (рд╕реАрдПрдордПрд╕ рд╕реЗ) рдмрдирд╛рдирд╛ рдФрд░ рдПрд╕рдПрд╕рдЬреА рдЪреЗрдХ рдЖрдЙрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ https://github.com/agility/agilitycms-next-starter- рдПрд╕ рдПрд╕ рдЬреА
рдореИрдВ рдПрдХ-рджреЛ рдмрд╛рд░ рд╕реНрдЯрдореНрдкреНрдб рд╣реЛ рдЧрдпрд╛ рдФрд░ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
zeit.co/now рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд░рддреЗ рд╕рдордп рдореИрдВ getStaticProps
рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдЕрдЧрд▓реЗ API рдорд╛рд░реНрдЧреЛрдВ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реВрдБ? рдЖрдЗрд╕реЛрдореЙрд░реНрдлрд┐рдХ-рдлрд╝реЗрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкреВрд░реНрдг URL рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ; рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдпрд╣ http://localhost : 3000 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдм рддреИрдирд╛рддреА рдХреЗ рд╕рд╛рде рдирд╣реАрдВ (рдпрд╛ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЧрд▓рдд рдХрд┐рдпрд╛ тАНтЩВя╕П)ред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рд╣реВрдВ, рддреЛ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ?
рдЖрдк рд╕реАрдзреЗ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ http рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдмрд╣реБрдд рдХрдо рдУрд╡рд░рд╣реЗрдб рд╣реИред
рдЖрдк рд╕реАрдзреЗ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ http рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдмрд╣реБрдд рдХрдо рдУрд╡рд░рд╣реЗрдб рд╣реИред
рдХреЛрдИ рднреА рд╕рдВрд╕рд╛рдзрди рдЬреЛ рдореИрдВ рдЙрд╕ рд╡рд┐рд╖рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реВрдБ? рдореИрдВ zeit.co/now рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реВрдВ :)
рдХрд╛рдлреА рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдЖрдпрд╛рдд рдХрд░реЗрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:
import MyFunction from '../lib/somewhere'
export async function /* unstable_ */getStaticProps() {
const result = await MyFunction()
}
рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓: рдХреНрдпрд╛ getStaticProps
/ getStaticPaths
рдФрд░ getServerProps
рд╕рд╛рде-рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдореИрдВрдиреЗ рдПрд╕рдПрд╕рдЬреА рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкреЗрдЬ рдкреНрд░реАрд░реЗрдВрдбрд░ рдХрд┐рдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╕реАрдбреАрдПрди рдХреИрд╢ рдореЗрдВ рдХреЛрдИ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреЗрдЬ рдСрди-рдбрд┐рдорд╛рдВрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдЖрд░ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛?
getStaticProps
SSR рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢реЗ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛,
getStaticProps
SSR рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢реЗ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛,
@lfades , рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдкрд░ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдХрдИ рд╣рдЬрд╛рд░ рдкреГрд╖реНрдареЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреНрд░реА-рд░реЗрдВрдбрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ... рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ /products/[productId].js
рдЧрддрд┐рд╢реАрд▓ рдкрде рдкреГрд╖реНрда рд╣реИред рдЕрдЧрд░ рдореИрдВ getStaticProps
, рдФрд░ getStaticPaths
рд╕реЗ рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╕реАрдбреАрдПрди рдХреИрд╢ рдореЗрдВ /products/123
рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдерд╛' t рдореЗрдВ getStaticPaths
), рдпрд╣ SSR рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, getStaticProps
рдЪрд▓рд╛рдПрдЧрд╛, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╢ рдХрд░реЗрдЧрд╛?
рдЕрдиреБрд╡рд░реНрддреА рдкреНрд░рд╢реНрди: рдпрджрд┐ рдореИрдВ getStaticPaths
рдЖрдкреВрд░реНрддрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рддреЛ рдХреНрдпрд╛ рдпрд╣ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛?
@flintinatux рд╣рд╛рдБ рдФрд░ рд╣рд╛рдБ
getStaticProps SSR рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛
рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ 404s рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ getStaticProps
res
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ - рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдкрд░ рдпрд╛ рддреЛ рдпрд╣ 200, рдпрд╛ 500 рд╣реЛрдЧрд╛ред
рдХреНрдпрд╛ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ?
@ davidbailey00 рд╕реНрдерд┐рд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмрдирд╛рддреЗ рд╕рдордп 404 рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 404 рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдмреЗрд╢рдХ рдЕрдЧрд░ рдореИрдВ рдПрдХ рдкреВрд░реНрдг рд╕реНрдерд┐рд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд┐рд░реНрдл рдПрдХ рдлрд╛рдЗрд▓ рд╣реИред рдореИрдВ getStaticProps
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ZEIT Now рдореЗрдВ рд╣рд╛рдЗрдмреНрд░рд┐рдб рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ getStaticPaths
рд╕рдореНрдорд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ 404 рдкреГрд╖реНрдареЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдкрде рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдмрд▓рдкреВрд░реНрд╡рдХ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдпрд╣ рд╕рд┐рд░реНрдл рдЕрдм рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╡реИрд╕реЗ рд╣реА next start
ред
рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдБ рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛: рдпрд╣ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╣реИ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреБрдЫ рднреА рдЕрднреА рднреА рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди getServerProps
рдпрд╛ getInitialProps
рд╕рд╛рде 404 рдкреГрд╖реНрдареЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ - рдпрджрд┐ getStaticProps
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╕рдордп getStaticPaths
рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдХрд┐рд╕реА рднреА рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рдЬреЛ рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ рдЕрдЪреНрдЫрд╛ рдПрд╕рдИрдУред
рд╣рдо рд╢рд╛рдпрдж рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдФрд░ рддрд░реАрдХреЗ рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯреЗрдВ (рдЬреИрд╕реЗ рд╕реАрдЖрд░рдП) /*
рд╕реЗ index.html
рдЬрд╣рд╛рдВ 404 рдЕрднреА рднреА 200 рд╣реИред
рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ, рдореЗрд░рд╛ рдПрдХ рд╕реАрдзрд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рдореИрдВ рдХреБрдЫ рдкреЗрдЬреЛрдВ рдХреЛ SSG рдореЗрдВ рдирдП [unstable_]getStaticProps
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред amp рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдпрд╣ рдЕрдм рддрдХ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рдпрджрд┐ рдХрд┐рд╕реА рдкреГрд╖реНрда рдореЗрдВ [unstable_]getStaticProps
, рддреЛ amp
рдЕрдХреНрд╖рдо рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдЕрдЧрд▓реЗ v9.2.1 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдЗрд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
import React from "react";
import { useAmp } from "next/amp";
export const config = { amp: `hybrid` };
const AmpExample = ({ date }) => {
const isAmp = useAmp();
return (
<>
<p>
Welcome to the {isAmp ? `AMP` : `normal`} version of the Index page!!
</p>
<p>date: {date}</p>
</>
);
};
/**
* If I get the dynamic data from getStaticProps,
* page is SSG render but AMP is disabled when accessing
* with `/ampExample?amp=1`
*/
export async function unstable_getStaticProps() {
return {
props: {
date: new Date().toISOString(),
},
};
}
/**
* If I get the dynamic data from getInitialProps,
* page is SSR render but AMP is disabled when accessing
* with `/ampExample?amp=1`
*/
// AmpExample.getInitialProps = () => {
// return { date: new Date().toISOString() }
// }
export default AmpExample;
рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреЗрдЬ SSG
рдФрд░ amp
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдХреЛрдИ рдорджрдж?
рдирдорд╕реНрддреЗ, App
рдШрдЯрдХ ( _app.tsx
) рдХреЗ рд▓рд┐рдП getStaticProps
рдХрд╛ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╛рдиреА рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рд╕рднреА рдкреГрд╖реНрда рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдЬреИрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП?
рдирдорд╕реНрддреЗ,
App
рдШрдЯрдХ (_app.tsx
) рдХреЗ рд▓рд┐рдПgetStaticProps
рдХрд╛ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╛рдиреА рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рд╕рднреА рдкреГрд╖реНрда рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдЬреИрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП?
@ pkral78 рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рд╡рд┐рдХрд╛рд╕ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реВрдВред
рдореИрдВрдиреЗ "рд▓реЗрдЖрдЙрдЯ рдПрдЬрд╝ рдП рд╣рд╛рдпрд░ рдСрд░реНрдбрд░ рдХрдВрдкреЛрдиреЗрдВрдЯ (HOC)" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдХ рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рдпрд╛ (рдЕрдм рд▓рд░реНрдирд┐рдВрдЧ рдбреЙрдХреНрд╕ рдореЗрдВ рдирд╣реАрдВ ЁЯд╖тАНтЩВя╕П)ред
рд╡реИрд╕реЗ рднреА, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рдПрдХ рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рдпрд╛ рд╣реИ (рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг):
import React from "react";
import Head from "next/head";
const withSSGLayout = Page => {
const WithSSGLayout = props => {
return (
<>
<Head>
<title>My Web Page</title>
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link
href="https://fonts.googleapis.com/css?family=Roboto:400,700&display=swap"
rel="stylesheet"
/>
</Head>
<Page {...props} />
</>
);
};
WithSSGLayout.unstable_getStaticProps = async () => {
const pageStaticProps = Page.unstable_getStaticProps
? await Page.unstable_getStaticProps()
: {};
// Here you can make parent level queries too
return {
props: {
...pageStaticProps.props,
parentProp: `dynamic prop-${new Date().toISOString()}`,
},
};
};
return WithSSGLayout;
};
export default withSSGLayout;
рдФрд░ рдлрд┐рд░ рдЙрд╕ рдкреГрд╖реНрда рдореЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЖрдк рдПрдЪрдУрд╕реА рдХреЛ рд╕рд░рд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдкрдХреЛ [unstable_]getStaticProps
рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ "рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛" рдорд┐рд▓рд╛ рдФрд░ рдкреНрд░рддрд┐ рдкреГрд╖реНрда рдПрд╕рдПрд╕рдЬреА рдкреНрд░рд╢реНрдиред
import React from "react";
import withSSGLayout from "../hocs/withSSGLayout";
export const config = { amp: `true` };
const Index = props => {
const { date, parentProp } = props;
return (
<div>
<h1>Example</h1>
<h3>Local Prop?: {date}</h3>
<h3>Parent Prop?: {parentProp}</h3>
</div>
);
};
// In theory you could do direct database queries
Index.unstable_getStaticProps = async () => {
// Here you can make page level queries
return {
props: {
date: new Date().toISOString(),
},
};
};
const IndexHOC = withSSGLayout(Index);
export const { unstable_getStaticProps } = IndexHOC;
export default IndexHOC;
рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреЗрд░реЗрдВрдЯ рдореЗрдВ рд▓рд┐рдВрдХ рдФрд░ рдкреЗрдЬ рд╡рд╛рд▓реЗ рдореЗрдВ рдкреНрд░рддрд┐ рдкреЗрдЬ рдХрдВрдЯреЗрдВрдЯ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ред
@robertovg рдЖрдкрдХреЛ рдореЙрдбреНрдпреВрд▓ рд╕реНрддрд░ рдкрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдкреЗрдбрд╝ рд╕реЗ рд╣рд┐рд▓ рдЧрдпрд╛ рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдиреЗ рдЗрд╕реЗ рдореЙрдбрд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдкрд░ рдЕрдзрд┐рдХ рдХреЛрдб рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред
@timneutkens рдХреНрдпрд╛ рдЖрдк рд╢рд╛рдпрдж рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдмрд╕ "рд▓реЗрдЖрдЙрдЯ рд▓реЗрд╡рд▓ рдПрд╕рдПрд╕рдЬреА рдХреНрд╡реЗрд░реА" рдФрд░ "рдкреЗрдЬ рд▓реЗрд╡рд▓ рдПрд╕рдПрд╕рдЬреА рдХреНрд╡реЗрд░реА" рджреЛрдиреЛрдВ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рдПрдЪрдУрд╕реА рд▓реЗрдЖрдЙрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ред
рдореЗрд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рдмрд╛рдзрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ "рдирд┐рд░реНрдпрд╛рдд [рдЕрд╕реНрдерд┐рд░_] getStaticProps" рдерд╛ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдПрд╕рдПрд╕рдЬреА рдкреГрд╖реНрда рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреА рднреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ amp + SSG рд╕рдВрдЧрдд рд╣реЛрдЧрд╛, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдкреВрдЫрд╛ рдерд╛ред
рдзрдиреНрдпрд╡рд╛рдж ЁЯЩП
@robertovg рдкрд╣рд▓реЗ, рдбреЗрдЯрд╛ рд╕реЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдЭрд╛ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд░рд▓ рд╣реЛрдЧрд╛:
import Layout from '../components/layout'
const Page = () => (
<Layout>
<h1>Hello World!</h1>
</Layout>
)
export default Page
рдФрд░ рдлрд┐рд░ getStaticProps
рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
import fetchSharedData from '../lib/fetch-shared-data'
import Layout from '../components/layout'
export const unstable_getStaticProps = async () => {
const sharedData = await fetchSharedData()
const pageProps = {...}
return { props: { ...sharedData, ...pageProps } }
}
const Page = () => (
<Layout>
<h1>Hello World!</h1>
</Layout>
)
export default Page
@robertovg рдкрд╣рд▓реЗ, рдбреЗрдЯрд╛ рд╕реЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдЭрд╛ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд░рд▓ рд╣реЛрдЧрд╛:
import Layout from '../components/layout' const Page = () => ( <Layout> <h1>Hello World!</h1> </Layout> ) export default Page
рдФрд░ рдлрд┐рд░
getStaticProps
рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:import fetchSharedData from '../lib/fetch-shared-data' import Layout from '../components/layout' export const unstable_getStaticProps = async () => { const sharedData = await fetchSharedData() const pageProps = {...} return { props: { ...sharedData, ...pageProps } } } const Page = () => ( <Layout> <h1>Hello World!</h1> </Layout> ) export default Page
рдореИрдВ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдФрд░ рд╕рдордЭрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЙрдард╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд╡рд╣ рдпрд╣ рдереА рдХрд┐ рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдХреИрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдПред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ <Header />
рдЬреЛ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП sharedData
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реЗ рдПрдХ рд╣реЗрдбрд▓реЗрд╕ рд╕реАрдПрдордПрд╕ рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВред рдЖрдкрдХреЛ <Header />
рдХреЛ <Layout />
рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЙрдкреНрд╕ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЖрдкрдХреЛ рдЙрди рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдореЗрдВ <Header />
рдЗрдВрдЬреЗрдХреНрд╢рди рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдПрдЪрдУрд╕реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЖрдк рдПрдЪрдУрд╕реА рдореЗрдВ рдПрдХ рдмрд╛рд░ <Header />
рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдХреЛрдб рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП @ pkral78 рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рдерд╛ред
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдХреЛрдб рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП @ pkral78 рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рдерд╛ред
рдпрд╣ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдерд╛ред _app рдкреЗрдЬ рдХрд╛ рдЕрдкрдирд╛ getStaticProps
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдкреЗрдЬ рд░реЗрдВрдбрд░ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕рд╣реЗрдЬреЗ рдЧрдП props
рдХреЛ рдЕрдЧрд▓реЗ рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдкреЗрдЬ рдкрд░ рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЙрдЪрд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬ рдПрдХ рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ:
// /pages/[...slug].jsx
import ReactDOMServer from "react-dom/server";
export async function unstable_getStaticProps({ params: { slug } }) {
const filePath = "../content/" + slug.join("/") + ".mdx";
const { default: Component } = await import(filePath);
const content = ReactDOMServer.renderToStaticMarkup(<Component />);
return {
props: { title: slug.join(" "), content }
};
}
export default function Page({ title, content }) {
return (
<div>
<h1>{title}</h1>
<div dangerouslySetInnerHTML={{ __html: content }} />
</div>
);
}
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдереЛрдбрд╝рд╛ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддрд╛ рд╣реИ:
[ warn ] ./pages/[...slug].jsx
Critical dependency: the request of a dependency is an expression
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдУрд╣, рдареАрдХ рд╣реИ, рдЬрдм рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
const { default: Component } = await import(`../content/${slug.join("/")}.mdx`);
рдпрд╣ рдЖрдкрдХреЗ рдЖрдпрд╛рдд рдлрд╝рд╛рдЗрд▓ рдкрде рдХреЗ рдЧрддрд┐рд╢реАрд▓ рд╣реЛрдиреЗ рдХреА рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд░рд╣рд╛ рд╣реИ
рдереВ, рейреж рдЬрдирд╡рд░реА реирежреиреж рдХреЛ режреж:реиреп рдмрдЬреЗ, рдЬрди рдкреЛрдЯрдореНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╛рдд
https://codesandbox.io/s/nifty-cache-jspqr рдПрдХ рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди
рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рд▓рдЧ рд░рд╣рд╛ рд╣реИ:// /рдкреГрд╖реНрда/[...рд╕реНрд▓рдЧ].jsximport ReactDOMServer "react-dom/server" рд╕реЗ;
рдирд┐рд░реНрдпрд╛рдд async рд╕рдорд╛рд░реЛрд╣ рдЕрд╕реНрдерд┐рд░_getStaticProps({ params: {рд╕реНрд▓рдЧ}}) {
// рдпрд╣ рднреА рдХрд┐рддрдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ?
const filePath = "../content/" + slug.join("/") + ".mdx";
рдХреЙрдиреНрд╕реНрдЯ {рдбрд┐рдлрд╝реЙрд▓реНрдЯ: рдШрдЯрдХ} = рдЖрдпрд╛рдд рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ (рдлрд╝рд╛рдЗрд▓рдкрд╛рде);
рдХреЙрдиреНрд╕реНрдЯ рдХрдВрдЯреЗрдВрдЯ = ReactDOMServer.renderToStaticMarkup (рдШрдЯрдХ);
рд╡рд╛рдкрд╕реА {
рд╕рд╣рд╛рд░рд╛: {рд╢реАрд░реНрд╖рдХ: slug.join(" "), рд╕рд╛рдордЧреНрд░реА}
};
}
рдирд┐рд░реНрдпрд╛рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдкреГрд╖реНрда ({рд╢реАрд░реНрд╖рдХ, рд╕рд╛рдордЧреНрд░реА}) {
рд╡рд╛рдкрд╕реА ({рд╢реАрд░реНрд╖рдХ}
);
}рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓рдЧрддрд╛ рд╣реИ a
рдереЛрдбрд╝рд╛ рд╕рдВрджрд┐рдЧреНрдз:[рдЪреЗрддрд╛рд╡рдиреА] ./рдкреГрд╖реНрда/[...рд╕реНрд▓рдЧ].jsx
рдЧрдВрднреАрд░ рдирд┐рд░реНрднрд░рддрд╛: рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/zeit/next.js/issues/9524?email_source=notifications&email_token=AAADKRKOL34WKTG7J5QFRJ3RAIGPBA5CNFSM4JRPBEL2YY3PNVWWWK3TUL52HS4DFVREXG43VMVBW63DNMVK-5ZYLOY
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAADKRIWNA2DSMWFRGD453DRAIGPBANCNFSM4JRPBELQ
.
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдХреЛрдб рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП @ pkral78 рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рдерд╛ред
рдпрд╣ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдерд╛ред _app рдкреГрд╖реНрда рдХрд╛ рдЕрдкрдирд╛
getStaticProps
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рд░реЗрдВрдбрд░ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕рд╣реЗрдЬреЗ рдЧрдПprops
рдХреЛ рдЕрдЧрд▓реЗ рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред
@ pkral78 , рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрд╕рдПрд╕рдЬреА рд╕рд╛рдЗрдЯреЛрдВ рдореЗрдВ рдореИрдВ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рдПрдХ "рд╕рд╛рдорд╛рдиреНрдп рдЯреБрдХрдбрд╝рд╛" (рд╢реАрд░реНрд╖рд▓реЗрдЦ, рдкрд╛рдж рд▓реЗрдЦ, рд╕рд╛рдЗрдб рдмрд╛рд░реНрд╕ ...) рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдФрд░ рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ рдЙрд╕ рд╕рд╛рдорд╛рдиреНрдп рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП _app рдореЗрдВ рдХреНрд╡реЗрд░реА рдмрдирд╛рдИ, рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдкрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрд┐рдирд╛ рдмрд╛рд▓ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдПрдВред
рдореЗрд░реА рдПрдХрдорд╛рддреНрд░ рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ _app.js
рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреГрд╖реНрда рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ "рдХреЙрдорди рдкреАрд╕" рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд┐ рдореИрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд░ рд░рд╣рд╛ рдерд╛, рдореИрдВ рдЗрд╕реЗ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреЗрдЬ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдИ рд▓реЗрдЖрдЙрдЯ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, "рдЗрд╕реАрд▓рд┐рдП рдореИрдВрдиреЗ withSSGLayout
рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдореЗрд░рд╛ рдПрдЪрдУрд╕реА рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рди рдХреЗрд╡рд▓ рдПрд╕рдПрд╕рдЬреА рдкреЗрдЬ рдмрд▓реНрдХрд┐ рдПрд╕рдПрд╕рдЖрд░ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдмреЗрд╕ рд╡рд╛рд▓реЗ, рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдПрд╕рдПрд╕рдЬреАрд▓рд╛рдЙрдЯ рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рдерд╛ред рдореИрдВ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ рдЕрдЧрд░ рд▓реЗрдЖрдЙрдЯ рдорд╛рддрд╛-рдкрд┐рддрд╛ getStaticProps
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рднреА рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╡реИрд╕реЗ рднреА, рдиреЗрдХреНрд╕реНрдЯ рдореЗрдВ SSG рд╣реЛрдиреЗ рд╕реЗ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреА рд╡реЗрдм рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдЯреВрд▓ рдмрди рдЬрд╛рдПрдЧрд╛
@Janpot https://github.com/zeit/next.js/issues/9524#issuecomment -580012327 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ
import()
рдореЗрдВ рдХрднреА рднреА рдЧрддрд┐рд╢реАрд▓ рдкрдереЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ
@timneutkens рдЬрд╝рд░реВрд░, рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдХреНрдпрд╛ getStaticProps
рдХреЗрд╡рд▓ рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ?
@ рдЬреЗрдирдкреЛрдЯ рдЖрдк рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдХреНрд╕рд░ рдЖрдк рдХреБрдЫ рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░ рд▓реЗрдВрдЧреЗред
@timneutkens рдареАрдХ рд╣реИ, @mdx-js/runtime
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @next/mdx
рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред
import ReactDOMServer from "react-dom/server";
import { promises as fs } from "fs";
import MDX from "@mdx-js/runtime";
export async function unstable_getStaticProps({ params: { slug } }) {
const mdxContent = await fs.readFile(`./content/${slug.join('/')}.mdx`, {
encoding: "utf-8"
});
const content = ReactDOMServer.renderToStaticMarkup(<MDX>{mdxContent}</MDX>);
return {
props: { title: slug.join(" "), content }
};
}
export default function Page({ title, content }) {
return (
<div>
<h1>{title}</h1>
<div dangerouslySetInnerHTML={{ __html: content }} />
</div>
);
}
@ рдЬрдирдкреЛрдЯ рд╣рд╛рдБ! рдЖрдк рд╕рд╛рджреЗ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣реА рд╣рдо nextjs.org/docs рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред
https://github.com/zeit/next.js/issues/9524#issuecomment -580207073 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдпрд╣ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ SSR рдХреЗ рд╕рд╛рде Next рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдЕрдиреБрд░реЛрдз рд╣реИ рдЬреЛ рд▓реЗрдЖрдЙрдЯ рд╕реНрддрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдРрдк рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдХреЛрдВ (рдирд╡рдмрд╛рд░, рдкрд╛рдж рд▓реЗрдЦ, рдФрд░ рдЧрддрд┐рд╢реАрд▓ рдмрдЪреНрдЪреЛрдВ) рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдлрд┐рд░, рдЧрддрд┐рд╢реАрд▓ рдмрдЪреНрдЪреЗ рдЖрдорддреМрд░ рдкрд░ рдкреГрд╖реНрда-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЧреНрд░рд╛рдлрд╝рдХреЙрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ, рдореИрдВ рдЙрди рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдкрд░ рдХреЛрдб рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЕрд░реЗ!
рдореИрдВ рдпрд╣рд╛рдБ рдмрд┐рд▓рдХреБрд▓ рдирдпрд╛ рд╣реВрдБред рдмрд╕ рдРрдк рдХреЛ рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред
рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рдмрд╣реБрдд рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдЧрд╛ - рдХрдИ рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдгред рдЬрд┐рд╕ рд╡реЗрдм рдРрдк рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЙрд╕рдореЗрдВ 16 рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдПрдХ рджрд┐рди рдореЗрдВ 100.000+ рдкреГрд╖реНрда рджреГрд╢реНрдп рд╣реИрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд▓реИрдВрдбрд┐рдВрдЧ рдкреГрд╖реНрда рд╢рд╛рдирджрд╛рд░ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рд░реВрдЯрд┐рдВрдЧ рд╣реИред
рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдореИрдВ рдЕрдиреБрд░реЛрдз рд╣реЗрдбрд░ рдпрд╛ рдХреБрдХреАрдЬрд╝ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЙрдЪрд┐рдд рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рд╣рд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкрде рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреИрд╕реЗ /en, /de, /fr рдФрд░ "/" рдореЗрдХ рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рд╕рд┐рд░реНрдл рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ?
ReactDOMServer.renderToStaticMarkup
рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ unstable_getStaticProps
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдФрд░ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЗрд╕рдиреЗ рдореЗрд░реЗ (рдореЛрдмрд╛рдЗрд▓) рдкреЗрдЬрд╕реНрдкреАрдб рд╕реНрдХреЛрд░ рдХреЛ 96 рд╕реЗ рдмрдврд╝рд╛рдХрд░ 100 рдХрд░ рджрд┐рдпрд╛ рд╣реИред .
рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд┐рдирд╛ рдкреЗрдЬ рдкрд░ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдПрд╕рдПрд╕рдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдкреЗрдЬ рд▓реЛрдб рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдореЗрд░реА рд╕рдордЭ рдХреА рдХрдореА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдФрд░ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╛рди рд╣реЛрдЧрд╛, рдФрд░ рдореИрдВ рдШрдЯрдХреЛрдВ рдХреЛ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡-рдкреНрд░рддрд┐рдкрд╛рджрди рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ (рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдПрд╕рдПрд╕рдЬреА рдпрд╣реА рдХрд░ рд░рд╣рд╛ рдерд╛)ред
рдХреНрдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рдПрдХ рдмрдЧ рд╣реИ, рдпрд╛ рдХреБрдЫ рдФрд░ рдЬреЛ рдореИрдВ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ?
рдкреВрд░реНрд╡-рдкреНрд░рддрд┐рдмрджреНрдз: https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2F5e310826bcf5030008a91209--josephduffynextjs.netlify.com%2Fposts%2Fgathered-1-0-1&tab=mobile
рдкреНрд░рддрд┐рдмрджреНрдз: https://github.com/JosephDuffy/josephduffy.co.uk/pull/54/commits/d23898b874e5088ebcfabf577ee396b476ed97e4
рдкреЛрд╕реНрдЯ-рдХрдорд┐рдЯ: https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2F5e3371beda1b8f0009368ef9--josephduffynextjs.netlify.com%2Fposts%2Fgathered-1-0-1&tab=mobile
@ рдЬреЛрд╕реЗрдл рдбрдлреА
рддреЛ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрд╕рдПрд╕рдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдкреЗрдЬ рд▓реЛрдб рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИред
рдпрд╣ рдбреЛрдо рдХреЛ рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ:
рдпрджрд┐ рдЖрдкрдХреА рд╕рд╛рдордЧреНрд░реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдпрд╛ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЪрд░рдг 2 рдФрд░ 3 рдПрдХ рддрд░рд╣ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИрдВред рдЕрдкрдиреА рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдШрдЯрдХ рдкреЗрдбрд╝ рдХреЛ 1 рдШрдЯрдХ рдХреЗ рд╕рд╛рде 1 рдШрдЯрдХ рддрдХ рдХрдо рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдФрд░ рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИред (+ dangerouslySetInnerHTM
рдЬрд▓рдпреЛрдЬрди рдХреЗ рджреМрд░рд╛рди рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)
<div dangerouslySetInnerHTML={{ __html: props.htmlContent }} />
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдФрд░ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдПрдХ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреГрд╖реНрда рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдП рдпрджрд┐ getStaticProps
рд╕реНрдерд┐рд░ html рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рдд
export async function unstable_getStaticProps() {
// ...
return {
props: { dangerouslySetInnerHTML: { __html: '<div>static content</div>' } }
};
}
рдЪреВрдВрдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдХреЛ рдХреБрдЫ рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, next.js рдЕрдкрдиреЗ рд░рдирдЯрд╛рдЗрдо рдХреЛ рдкреЗрдЬ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ HTML рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ getStaticProps
рд▓реМрдЯрд╛ рд╣реИред рдФрд░ рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ dangerouslySetInnerHTML
рдХрд╛ рдЙрдкрдпреЛрдЧ next.js рд░реВрдЯ рдиреЛрдб рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЖрдВрд╢рд┐рдХ рдЬрд▓рдпреЛрдЬрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рд░рд┐рдПрдХреНрдЯ рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рднреНрд░рдо рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреАред
рдореИрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдХреЛ Next.js рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЗ рд╕рднреА .html рд░реВрдкреЛрдВ рдХреЛ .html рдореЗрдВ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ getStaticProps
рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрд▓рдЧ рдФрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ рдпрджрд┐ getStaticProps
рдХреЛ рдкреВрд░реНрдг рд╕рдВрджрд░реНрдн рдорд┐рд▓реЗ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рд╢рд░реНрдд рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХреВрдВред
@nodabladam рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд╕реНрдЯрдо рд░реВрдЯ рдЖрд░рдПрдлрд╕реА: # 9081 рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИрдВред
рд╡рд╣ RFC рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:
// next.config.js
module.exports = {
redirects() {
return [
// Redirect from the old HTML version of a blog post
{
source: "/blog/:post.html",
destination: "/blog/:post",
permanent: true
}
];
}
};
рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ experimental
рдХреБрдВрдЬреА рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ:
// next.config.js
module.exports = {
experimental: {
redirects() {
// ...
}
}
};
рдореИрдВрдиреЗ рдЕрдкрдиреА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ (рд▓рдЧрднрдЧ 8K рдкреГрд╖реНрда) рдкрд░ getStaticProps рдФрд░ getStaticPathNames рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЧрдгрдирд╛ рдкреНрд░рддрд┐ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА 10K рд╕реАрдорд╛ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред 8K рдкреГрд╖реНрдареЛрдВ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ 16K рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЛ рдПрдХ json рдлрд╝рд╛рдЗрд▓ рднреА рдорд┐рд▓рддреА рд╣реИред
рдХреНрдпрд╛ рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ? рдпрд╛ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рдореЗрд░реА рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдЙрд╕ рд╕реАрдорд╛ рдХреЛ рдЙрдард╛рдирд╛ рдЪрд╛рд╣ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдХрдм рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рддреЛ рдореИрдВ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рдХреЗрд╡рд▓ рд╕реНрдЯреЗрдЯрд┐рдХрдкреИрде рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдореЗрд░рд╛ рдЙрддреНрдкрд╛рдж рдкреГрд╖реНрда рдХреБрд▓ рдкреГрд╖реНрдареЛрдВ рдХрд╛ 70% рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ getStaticPaths рдирд╣реАрдВ рдбрд╛рд▓рд╛)ред рдореИрдВ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд░рд╣рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдкрд╣рд▓рд╛ рд▓реЛрдб рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ рдФрд░ 404 рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдореЗрд░реА рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдЙрд╕ рд╕реАрдорд╛ рдХреЛ рдЙрдард╛рдирд╛ рдЪрд╛рд╣ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдХрдм рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрддреЛ рдореИрдВ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рдХреЗрд╡рд▓ рд╕реНрдЯреЗрдЯрд┐рдХрдкреИрде рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдореЗрд░рд╛ рдЙрддреНрдкрд╛рдж рдкреГрд╖реНрда рдХреБрд▓ рдкреГрд╖реНрдареЛрдВ рдХрд╛ 70% рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ getStaticPaths рдирд╣реАрдВ рдбрд╛рд▓рд╛)ред рдореИрдВ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд░рд╣рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдкрд╣рд▓рд╛ рд▓реЛрдб рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ рдФрд░ 404 рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдЬрд▓реНрдж рд╣реА рд╕реАрдорд╛ рдмрдврд╝рд╛ рджреЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ 20K рдирд╣реАрдВ рд╣реЛрдЧрд╛ .. рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдореИрдВ getStaticPaths рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд▓реЛрдб рд╕рдордп рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ .. рдореБрдЭреЗ Zeit Now рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдкрдбрд╝ рд╕рдХрддреА рд╣реИ
Next.js рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░реЗрдЧрд╛ рдЬреЛ getServerProps рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред [...] Next.js рдЗрд╕ рдПрдХреНрд╕рдкреЛрдЬрд╝реНрдб рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ JSON рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдПрдЧрд╛ рдЬреЛ рдкреЗрдЬ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
Next.js рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдФрд░ рдкреГрд╖реНрда рдШрдЯрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ (рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдПрдХ рдЕрддреНрдпрдВрдд рддреЗрдЬрд╝ рд╕рд╛рдЗрдЯ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╡реЗ рдХрд┐рд╕реА SSR рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдкрд╣рд▓реЗ рдЕрдЪрд╛рдирдХ рд╕рд╛рдЗрдЯ "рд╣реИрдВрдЧ" рд╣реЛ рдЬрд╛рдПрдЧреАред
рдХреНрдпрд╛ рдШрдЯрдХ _first_ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рд▓реЛрдбрд┐рдВрдЧ рд╕рдВрдХреЗрддрдХ, рдПрдирд┐рдореЗрдЯреЗрдб рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рд╕рд╛рде рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ? (рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрддрдорд╛рди рдкреГрд╖реНрда рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдпред) рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдирдИ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВрдиреЗ рдЗрд╕реЗ рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ getInitialProps рдФрд░ рд╣реБрдХ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЧрдиреНрджрд╛ рд▓рдЧрддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдпреВрдПрдХреНрд╕ рдкреИрдЯрд░реНрди (рддрддреНрдХрд╛рд▓ рдкреГрд╖реНрда рд╕реНрд╡рд┐рдЪ) рдХрдИ (рдЕрдзрд┐рдХрд╛рдВрд╢?) рджреНрд╡рд╛рд░рд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВред
рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддреНрд╕рд╛рд╣рд┐рдд! рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
@nicoqh , рдкреЗрдЬ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рдЪрд┐рдВрддрд╛рдПрдБ SSG рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣реИрдВрдЧ рд╡рд░реНрддрдорд╛рди getInitialProps
ред рдореИрдВ nprogress
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдо рд╕реЗ рдХрдо рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ, рдЬрдмрдХрд┐ рдЕрдЧрд▓рд╛ рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХрд╛рдиреВрдиреА рдкреГрд╖реНрда рд╕рдВрдХреНрд░рдордг рд╣реЛрдиреЗ рдХрд╛ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рднреА рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЬреЛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдХрд░реАрдм рдзреНрд╡рдирд┐ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдЬреЛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ:
https://github.com/zeit/next.js/tree/canary/examples/with-next-page-transitions
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ json рдлрд╝рд╛рдЗрд▓ /_next/data/BUILD_ID/<file>.json
рдЬреЛ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╣реИ рд╡рд╣ рдПрд╕реЗрдЯрдкреНрд░рд┐рдлрд╝рд┐рдХреНрд╕ рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдпрд╣ рдореЗрд░реЗ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛ 404 рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рд╕реЗрдЯрдЕрдк рд╣реИ рдЬреЛ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ _next рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдЬреЛ рд╕реАрдбреАрдПрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреА рд╣реИред рдпреЗ рдЬреЛрдВрд╕ рдлрд╛рдЗрд▓реЗрдВ рдЕрдВрддрддрдГ рдПрд╕реЗрдЯрдкреНрд░рд┐рдлрд╝рд┐рдХреНрд╕ (рд╕реАрдбреАрдПрди) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╣реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП?
рдореЗрд░реА рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдЙрд╕ рд╕реАрдорд╛ рдХреЛ рдЙрдард╛рдирд╛ рдЪрд╛рд╣ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдХрдм рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рддреЛ рдореИрдВ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рдХреЗрд╡рд▓ рд╕реНрдЯреЗрдЯрд┐рдХрдкреИрде рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдореЗрд░рд╛ рдЙрддреНрдкрд╛рдж рдкреГрд╖реНрда рдХреБрд▓ рдкреГрд╖реНрдареЛрдВ рдХрд╛ 70% рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ getStaticPaths рдирд╣реАрдВ рдбрд╛рд▓рд╛)ред рдореИрдВ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд░рд╣рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдкрд╣рд▓рд╛ рд▓реЛрдб рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ рдФрд░ 404 рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИредрдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдЬрд▓реНрдж рд╣реА рд╕реАрдорд╛ рдмрдврд╝рд╛ рджреЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ 20K рдирд╣реАрдВ рд╣реЛрдЧрд╛ .. рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдореИрдВ getStaticPaths рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд▓реЛрдб рд╕рдордп рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ .. рдореБрдЭреЗ Zeit Now рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдкрдбрд╝ рд╕рдХрддреА рд╣реИ
@erhankaradeniz рдФрд░ @ziltosh рд╣рдореЗрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдЬрд▓реНрдж рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдЙрд╕ ASAP рдХреЗ рд╕рд╛рде рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдореБрдЭреЗ рд╕реАрдзреЗ рдпрд╛ [email protected] рдкрд░ рдкрд┐рдВрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдЖрдкрдХреЛ рд╕реБрд▓рдЭрд╛ рд▓реЗрдВрдЧреЗред
рдореЗрд░реА рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдЙрд╕ рд╕реАрдорд╛ рдХреЛ рдЙрдард╛рдирд╛ рдЪрд╛рд╣ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдХрдм рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рддреЛ рдореИрдВ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рдХреЗрд╡рд▓ рд╕реНрдЯреЗрдЯрд┐рдХрдкреИрде рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдореЗрд░рд╛ рдЙрддреНрдкрд╛рдж рдкреГрд╖реНрда рдХреБрд▓ рдкреГрд╖реНрдареЛрдВ рдХрд╛ 70% рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ getStaticPaths рдирд╣реАрдВ рдбрд╛рд▓рд╛)ред рдореИрдВ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд░рд╣рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдкрд╣рд▓рд╛ рд▓реЛрдб рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ рдФрд░ 404 рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИредрдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдЬрд▓реНрдж рд╣реА рд╕реАрдорд╛ рдмрдврд╝рд╛ рджреЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ 20K рдирд╣реАрдВ рд╣реЛрдЧрд╛ .. рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдореИрдВ getStaticPaths рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд▓реЛрдб рд╕рдордп рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ .. рдореБрдЭреЗ Zeit Now рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдкрдбрд╝ рд╕рдХрддреА рд╣реИ@erhankaradeniz рдФрд░ @Ziltosh рд╣рдореЗрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдЬрд▓реНрдж рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдЙрд╕ ASAP рдХреЗ рд╕рд╛рде рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдореБрдЭреЗ рд╕реАрдзреЗ рдпрд╛ [email protected] рдкрд░ рдкрд┐рдВрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдЖрдкрдХреЛ рд╕реБрд▓рдЭрд╛ рд▓реЗрдВрдЧреЗред
рдзрдиреНрдпрд╡рд╛рдж @kvangundy
рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдЖрдкрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ рд╣реИ ;-)
@erhankaradeniz рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп [email protected] рдкрд░ рдИрдореЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕ рддрд░рд╣ рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЦрддреНрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
@flintinatux , рдЯрд┐рдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреЗрдЬ рдШрдЯрдХ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрди-рдкреЗрдЬ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдЖрджрд┐ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж!
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╖рдп рд╕реЗ рджреВрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдФрд░ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ :)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ getInitialProps рдХреЛ getStaticProps
рдФрд░ getServerProps
рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╣реБрдд рд╕рд╛рдл рд╣реИ! рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ:
рд╣рдо 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд┐рд▓реНрдб рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рдПрдХ рд╣рдорд╛рд░реА рдЙрддреНрдкрд╛рдж рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг, рдФрд░ рдПрдХ рд╕рдВрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП SSR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдгред
рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореИрдВ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ getStaticProps
рдмрдирд╛рдо getServerProps
рдХреЛ рдмрд┐рд▓реНрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (https://github.com/zeit/next.js/issues/9524#issuecomment- рдХреЗ рд╕рдорд╛рди- 558617056), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдпрд╛ рдирд╣реАрдВред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдЕрдЧрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓/рд╕реНрдереИрддрд┐рдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?
рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдз:
RFC рдХреЛ рдмрд╛рдж рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдлрд┐рд░ рднреА рд╣рдорд╛рд░реЗ рдРрдкреНрд╕ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рд╣реЛрдЧреАред
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдЕрдЬреНрдЮрд╛рдд рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдорд╛рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдХрдорд╛рд▓ рд╣реИ рдХрд┐ рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реАрдПрдордПрд╕ рдбреЗрдЯрд╛ рд╕реЗ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдирдпрд╛ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдирд╣реАрдВ рд╣реИред рдпрд╣ рдореБрджреНрджрд╛ рдореЗрд░реЗ рд╕рд┐рд░ рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЦрд░реЛрдВрдЪ рд░рд╣рд╛ рд╣реИред
рдореИрдВрдиреЗ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда _рдкреГрд╖реНрда/[рд╕реНрд▓рдЧ] .js_ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред _getStaticPaths_ рдЙрди рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _getStaticProps_ рд╣реИред _getStaticPaths_ рдореЗрдВ рджрд┐рдП рдЧрдП рд╕рднреА рдкреЗрдЬ рдмрд┐рд▓реНрдб рдкрд░ _.next/server/static_ рдХреЗ рдЕрдВрджрд░ HTML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдорд╣рд╛рди!
рдЕрдм рдореИрдВ npm run start
рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЗрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЬреИрд╕рд╛ рдЙрдиреНрд╣реЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЕрдиреБрдкрд▓рдмреНрдз url (рдЬреИрд╕реЗ _/foo_) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╕реЗ _.next/server/static_ рдХреЗ рдЕрдВрджрд░ рдирдИ рд╕реНрдерд┐рд░ HTML рдФрд░ JSON рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдиреНрдп рд╕рднреА рдпреВрдЖрд░рдПрд▓ рдХреЛ _pages/_error.js_ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ?
https://github.com/zeit/next.js/issues/9524#issuecomment -582777067
рд╣рдо рдЙрд╕реЗ рднреА рдХрд╡рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЕрдм рдореИрдВ npm рд░рди рд╕реНрдЯрд╛рд░реНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЗрди рдкреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреИрд╕рд╛ рдЙрдиреНрд╣реЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдПрдХ рд▓рд╛рдкрддрд╛ url (рдЬреИрд╕реЗ /foo) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╕реЗ .next/server/static рдХреЗ рдЕрдВрджрд░ рдирдИ рд╕реНрдерд┐рд░ HTML рдФрд░ JSON рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдиреНрдп рд╕рднреА рдпреВрдЖрд░рдПрд▓ рдХреЛ рдкреЗрдЬ/_error.js рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ?
рдпрд╣ рдЕрднреА рднреА рдЙрдбрд╝рд╛рди рдореЗрдВ рд╣реИ рдФрд░ рдЕрднреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИред
рдлрд┐рд░ рд╕реЗ рдПрдХ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХрд┐ рдЖрдк рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рд╕реА рднреА рд╕рдордп рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЪреАрдЬреЗрдВ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреА рдФрд░ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЯреВрдЯ рдЬрд╛рдПрдВрдЧреА рдЬрдм рдпрд╣ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
@timneutkens рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЕрд╕реНрдерд┐рд░рддрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдИ рдЖрдЗрдбрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдореИрдиреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ рдФрд░ рджреЗрдЦрд╛ рдХрд┐ _unstable_getStaticProps_ рдХреЗ рдЕрдВрджрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрда рдкреНрд░рд╕реНрддреБрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ _pages/_error.js_ рдХреЗ рд▓рд┐рдП рд╣реИред рдореИрдВ рдЗрд╕реЗ рекрежрек рднреЗрдЬрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЕрдм рдпрд╣ релрежреж рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдиреНрдп рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рднреА рдХрдИ рдмрд╛рд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "_error рдкрд░ рдЬрд╛рдирд╛" рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдЕрднреА рдЖрдкрдХреЗ рдкреГрд╖реНрда рдХреЛ 404 рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ рддреЛ if(!data.something) { return <My404Component /> }
, рдФрд░ рдлрд┐рд░ My404Component
рдХреЛ noindex
рдореЗрдЯрд╛ рдЯреИрдЧ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдЪрдореБрдЪ? рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ 404 рдХреЗ рд▓рд┐рдП _pages/_error.js_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИред
рджреЗрдЦреЗрдВ: https://nextjs.org/docs/advanced-features/custom-error-page
@ jiv-e рдЬреЛ рдХрд┐ рекрежрек рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ:
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ "404" рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдХрд╣рд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://nextjs.org/docs/advanced-features/custom-error-page#reuse -the-built-in-error- рдкреГрд╖реНрда
рд╕рдордЭ рдЧрдпрд╛! рдзрдиреНрдпрд╡рд╛рдж!
рдореИрдВ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдЕрдиреБрд╡рд╛рдж/рднрд╛рд╖рд╛ рдХреБрдВрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП getStaticProps
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рдВрднрд╡рддрдГ 1-2 рдмрд╛рд░ рдорд╣реАрдиреЗ рдпрд╛ рдкреНрд░рддрд┐ рд╡рд░реНрд╖ рднреА рдмрджрд▓реЗрдВрдЧреЗред рдбреАрдУрдПрдо рдХреЗ рднреАрддрд░ рдЬреЗрдПрд╕рдУрдПрди/рдкреНрд░реЛрдк рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдкреЗрдбрд╝ рдХреЗ рдиреАрдЪреЗ рдЙрд╕ рдШрдЯрдХ рдХреЛ рдХреБрдВрдЬреА рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдЬрд╣рд╛рдВ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ - рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ?
useTranslation () рд╣реБрдХ (рдпрд╛ HOC) рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде?
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ AppTree
NextGetStaticProps Context ( getStaticProps({ AppTree })
) рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛ред рдЕрдиреНрдпрдерд╛ ssg рдкрд░ apollos getDataFromTree
рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдЪрд▓рд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдо AppTree рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЛ getStaticProps рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦрд░рд╛рдм рд╣реИ (рдХрдВрдкрдирд┐рдпреЛрдВ рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛)ред рдЬрдм рдЖрдк рдХрд┐рд╕реА рдкреГрд╖реНрда рдкрд░ getStaticProps рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрднреА рднреА рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдЕрдкрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП _app рдХреЗ getInitialProps рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрднреА рднреА рдЕрдкреЛрд▓реЛ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ amp: 'hybrid'
рдФрд░ SSG рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реЛред
рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдХрд░ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛рдиреА:
рдпрд╣ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ ?amp=1
рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ amp рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ
amp: 'hybrid'
рдФрд░ SSG рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реЛред
рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдХрд░ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛рдиреА:
- (рдПрд╕рдПрд╕рдЬреА) index.html
- (рдПрдПрдордкреА) index.amp.html
рдпрд╣ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ
?amp=1
рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ amp рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдмрд┐рд▓реНрдХреБрд▓ @Dacturne , рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ SSG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рд╕рдордп рдкрд╣рд▓реЗ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдореИрдВ
@jansedlon рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрддреЗ рд╣реБрдП рдПрдХ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдмрдирд╛рдпрд╛ рд╣реИ:
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдЕрдЬреНрдЮрд╛рдд рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдорд╛рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдХрдорд╛рд▓ рд╣реИ рдХрд┐ рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реАрдПрдордПрд╕ рдбреЗрдЯрд╛ рд╕реЗ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдирдпрд╛ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдирд╣реАрдВ рд╣реИред рдпрд╣ рдореБрджреНрджрд╛ рдореЗрд░реЗ рд╕рд┐рд░ рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЦрд░реЛрдВрдЪ рд░рд╣рд╛ рд╣реИред
https://paqmind.com/hi/blog/ssr-is-not-the-future
(рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ)
@ ivan-kleshnin рдореИрдВрдиреЗ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдбрд╛рд▓реА рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рд░реЛрдорд╛рдВрдЪрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдореБрдЭреЗ рд╕реИрдХрдбрд╝реЛрдВ рдШрдВрдЯреЗ рдмрдЪрд╛рдП рд╣реЛрдВрдЧреЗ! рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЖрдЬ рдмрд╛рдж рдореЗрдВ рдФрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рджреЗрдЦреВрдВрдЧрд╛ред
https://github.com/zeit/next.js/issues/9524#issuecomment -582799948
@jansedlon рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╣рдо рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреБрдЫ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ @ ivan-kleshnin рдХреЗ рдмреНрд▓реЙрдЧрдкреЛрд╕реНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЬрд▓реНрдж рдЗрд╕ рдкрд░ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдЭрд╛ рдХрд░ рдкрд╛рдПрдВрдЧреЗред
@timneutkens рдЕрдм рддрдХ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИ ЁЯЩП рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреВрд░реНрдг рд╕реНрдерд┐рд░ + рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдореЗрдВ рд╕реБрдзрд╛рд░ / рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ?
рд╣рдо Tinacms.org рдХреЗ Gatsby рд╕реЗ Next.js рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдореЗрдВ рдирдП getStaticProps
/ getStaticPaths
API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЕрдм рддрдХ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд░рд╣рд╛ рд╣реИ!
RSS рдлрд╝реАрдб рдмрдирд╛рдиреЗ рдореЗрдВ рдПрдХ рдмрд╛рдзрд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдо рдЗрд╕реЗ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрд┐рд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ рд╡рд╣ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░рдХреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдПрдордПрд▓ рд▓рд┐рдЦрдХрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╕рдВрднрд╛рд▓ рд░рд╣реЗ рд╣реИрдВред
рдХреНрдпрд╛ рдЧреИрд░-рдПрдЪрдЯреАрдПрдордПрд▓ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдкреАрдврд╝реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рд╣реИ?
FYI рдХрд░реЗрдВ рд╣рдордиреЗ рдЕрднреА zeit рдкрд░ getStaticProps
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ --prod
рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдпрд╛ рдФрд░ рдирдИ рд░рд┐рд▓реАрдЬрд╝ рдкрд░ json рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рд╕рд╛рдлрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рд╣рдорд╛рд░реЗ рдЙрддреНрдкрд╛рджрди рд░рд┐рд▓реАрдЬ рдХреЛ рд╡рд╛рдкрд╕ рдЙрдкрдирд╛рдо рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ рдФрд░ рдХреИрд╢ рд╕рд╛рдлрд╝ рд╣реЛ рдЧрдпрд╛ред
рд╣рдо Tinacms.org рдХреЗ Gatsby рд╕реЗ Next.js рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдореЗрдВ рдирдП
getStaticProps
/getStaticPaths
API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЕрдм рддрдХ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд░рд╣рд╛ рд╣реИ!RSS рдлрд╝реАрдб рдмрдирд╛рдиреЗ рдореЗрдВ рдПрдХ рдмрд╛рдзрд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдо рдЗрд╕реЗ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрд┐рд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ рд╡рд╣ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░рдХреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдПрдордПрд▓ рд▓рд┐рдЦрдХрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╕рдВрднрд╛рд▓ рд░рд╣реЗ рд╣реИрдВред
рдХреНрдпрд╛ рдЧреИрд░-рдПрдЪрдЯреАрдПрдордПрд▓ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдкреАрдврд╝реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рд╣реИ?
рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рдЕрднреА рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИред рдпрд╣рд╛рдБ рдореЗрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:
"scripts": {
"dev": " next",
"build": "yarn sitemap && next build",
"start": "next start",
"sitemap": "ts-node --project ./cli/tsconfig.spec.json ./cli/generateSitemap.ts"
},
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ next build
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ yarn sitemap
рдХрд┐ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯрдореИрдк рдЬрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ json рдореЗрдВ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ getStaticProps
рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЖрдк рдЗрд╕реЗ рдХрдИ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
RFC рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, getStaticPaths
рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджрд┐рдпрд╛ (рдЖрдкрдХреЛ рдЕрдм paths
рдХреБрдВрдЬреА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ getStaticProps
рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ props
рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЕрднреА рддрдХ Next.js рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИред
fallback
рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рднреА рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ (рдкреГрд╖реНрдареЛрдВ рдХреА рдСрди-рдбрд┐рдорд╛рдВрдб рдкреГрд╖реНрдарднреВрдорд┐ рдирд┐рд░реНрдорд╛рдг рдЬреЛ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗ)ред
RFC рдореЗрдВ рдПрдХ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, Loading
рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЬреЛрдбрд╝рд╛ред
рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдбрд┐рдВрдЧ рд╕реНрдерд┐рддрд┐ рдХреЛ рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ
рдорд╣рд╛рди рд╕рд╛рдорд╛рди! рдореИрдВ рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдХреНрдпрд╛ рдПрдХ JSON рдлрд╝рд╛рдЗрд▓ (рдЬреИрд╕реЗ рдХреЛрдб-рд╡рд┐рднрд╛рдЬрди рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛?
рдореИрдВ рдирд╡реАрдирддрдо canary
рдмрд┐рд▓реНрдб рддрдХ рдкрд╣реБрдВрдЪрд╛ рдФрд░ рддреБрд░рдВрдд рдирдП Loading
рд░рд╛рдЬреНрдп рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╣реЛ рдЧрдпрд╛ред рдЕрддреАрдд рдореЗрдВ, рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЕрдЪреНрдЫрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рджреГрд╢реНрдп рдкрд░рдд рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдореБрдЭреЗ рд╕рд╣реА рдбреЗрдЯрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред рдЬрдмрд░рди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд▓реЛрдбрд┐рдВрдЧ рдЙрд╕ рд╕реЗ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд░рд╕реНрдерд╛рди рд╣реИред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рдЪреАрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдордЬрд╝рд╛ рдЖрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдирдП рдСрдЯреЛ-рдЬреЗрдирд░реЗрдЯреЗрдб рдПрд╕рдПрд╕рдЖрд░ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореИрдВ рдирдП Loading
рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ рдкреЗрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣рд╛ рдерд╛ред
рдореИрдВ рдПрдХ рддреЗрдЬ TTFB рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЬреЛ рдореЗрд░реЗ рдРрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ Loading
рд╕реНрдерд┐рддрд┐ рдХреЛ fallback: false
рд▓рд┐рдП getStaticPaths
рд╕рдорд╛рди рдПрдХ рдСрдкреНрдЯ-рдЗрди рдпрд╛ рдСрдкреНрдЯ-рдЖрдЙрдЯ рд╕реБрд╡рд┐рдзрд╛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рд╢рд╛рдпрдж рдкреГрд╖реНрда рдкрд░ export const enableLoadingState = false
, рдпрд╛ next.config.js
рдореЗрдВ рд╕рд╛рдЗрдЯ-рд╡реНрдпрд╛рдкреАред
https://github.com/zeit/next.js/issues/9524#issuecomment -583962425
рдлрд┐рд░ рд╕реЗ рдПрдХ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХрд┐ рдЖрдк рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдЕрдкрдиреА (рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ) рдПрд╕рдПрд╕рдЬреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЛ рдЕрднреА (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдЗрдЯ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм рдореЗрдВ 404 рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВред рд╕рднреА 404 рддреНрд░реБрдЯрд┐рдпрд╛рдВ _next/static/pages/[slug].js
рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИрдВред
рдХреНрдпрд╛ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЬрдмрдХрд┐ рдпрд╣ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╣реИ? рдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓рдиреА рдЪрд╛рд╣рд┐рдП?
@joostmeijles рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА href
рдФрд░ as
рд╕реЗ next/link
ред рдбрд╛рдпрдирд╛рдорд┐рдХ рдкреЗрдЬ рдХреЗ рд▓рд┐рдП href
рдХреЛ рдкреЗрдЬ href='/[slug]'
рдФрд░ as
рдХреЛ рдпреВрдЖрд░рдПрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП as='/slug-1'
рдореБрдЭреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдХрдВрд╕реЛрд▓ рдореЗрдВ 3 рд▓реЙрдЧ рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ?
// Page is showing three logs despite static path only having 2 entries and output generating only two files as intended
export default function Page(props){
console.log("Page - should only show twice", props);
return <><h1>Page</h1></>
}
export async function unstable_getStaticProps(props) {
console.log("unstable_getStaticProps - should only show twice", props);
return {
props
};
}
export async function unstable_getStaticPaths() {
console.log("show once")
return {
paths: [
{ params: { year: "1901" } },
{ params: { year: "1902" } },
]
}
}
рдирд╣реАрдВ, рдпрд╣ RFC рдореЗрдВ fallback
рдЕрдиреБрд╕рд╛рд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред
рдирд╣реАрдВ, рдпрд╣ RFC рдореЗрдВ
fallback
рдЕрдиреБрд╕рд╛рд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред
export async function unstable_getStaticPaths() {
console.log("show once")
return {
fallback: false,
paths: [
// This renders /blog/hello-world to HTML at build time
{ params: { year: "1901" } },
{ params: { year: "1902" } },
]
}
}
рдореИрдВрдиреЗ рдСрдкреНрдЯ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред
рддреНрд░реБрдЯрд┐: / [рд╡рд░реНрд╖] (рдлрд╝реЙрд▓рдмреИрдХ) рдореЗрдВ рдЕрд╕реНрдерд┐рд░_рдЧреЗрдЯрд╕реНрдЯреИрдЯрд┐рдХрдкрд╛рде рд╕реЗ рд▓реМрдЯрд╛рдИ рдЧрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдиреБрдордд рдПрдХрдорд╛рддреНрд░ рдлрд╝реАрд▓реНрдб
paths
рдлрд┐рд░ рд╕реЗ рдПрдХ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХрд┐ рдЖрдк рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ getStaticProps
рдХреЗрд╡рд▓ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреА?
рдРрдк/рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?
рдореИрдВрдиреЗ рдЗрд╕реЗ 'рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ' рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЕрдм рддрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдЦреБрд╢ рд╣реВрдВ .. рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдмрд╛рдж рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ 'рддреЗрдЬ' рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдПрд╕рдПрд╕рдЬреА рдЙрддреНрдкрдиреНрди рдкреГрд╖реНрда рдирд╣реАрдВ рдмрджрд▓реЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ? (рд╢рд╛рдпрдж рдореЗрд░реА рдУрд░ рд╕реЗ рдЗрдЪреНрдЫрд╛рдзрд╛рд░реА рд╕реЛрдЪ)
@timneutkens рдХреНрдпрд╛ рдПрд╕рдПрд╕рдЬреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП
@timneutkens рдХреНрдпрд╛ рдПрд╕рдПрд╕рдЬреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП
рд╣рд╛рдБ рдпрд╣ рдПрдХ рдмрдврд╝рд┐рдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЛ SSR рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред (рд▓реЗрдХрд┐рди рд╕рд╛рдЗрдЯрдореИрдк.рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рд╣реЛрдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддреА рд╣реИ)
https://github.com/zeit/next.js/issues/9524#issuecomment -585293270
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдХреЗрд╡рд▓ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рдХрд╛рд░реНрдп рд╣реЛрдВрдЧреЗ рдЬреЛ getStaticProps рдХреЗ рд▓реИрдВрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
https://github.com/zeit/next.js/issues/9524#issuecomment -586957539
рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдЗрд╕ RFC рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред рдЗрд╕ рднреВрдорд┐ рдХреЗ рдмрд╛рдж рдПрдХ рдЕрдиреБрд╡рд░реНрддреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реЛрдЧреАред
@timneutkens рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрд╕рдПрд╕рдЬреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╣рд░ рдмрд╛рд░ рдПрдХ рдпреВрдЖрд░рдЖрдИ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдзрдХреНрдХрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЕрдЧрд▓рд╛ рдПрдХ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░, рдЬрдм рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдмрд╕ рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╕рдПрдордПрд▓ рдЯреИрдЧ рдореЗрдВ рд╕рд░рдгреА рдХреЛ рдореИрдк рдХрд░реЗрдВ, рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдФрд░ рдЗрд╕реЗ рдмреАрдЪ рдореЗрдВ рдбрд╛рд▓реЗрдВ рдПрдХ <sitemapindex>
рдЯреИрдЧ рдХрд╛ред getStaticProps
рдореЗрдВ excludeFromSitemap
рдирд╛рдордХ рд░рд┐рдЯрд░реНрди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдФрд░ рдХреБрдВрдЬреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЛ sitemap.xml
рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдСрдкреНрдЯ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рдеред
рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛, рддреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рдЗрд╕ рдкрд░ рдЕрдЪреНрдЫрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣реЛрддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рд╕рд╛рдЗрдЯрдореИрдк рдореЗрдВ рдЬрд╛рдПрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдпрджрд┐ рдкреГрд╖реНрда [foo]
рдХрд╛ getStaticPaths
рдлрд╝рдВрдХреНрд╢рди foo
рд╕рд╛рде рдкрде рд▓реМрдЯрд╛рддрд╛ рд╣реИ 'abc'
рдФрд░ 'xyz'
рд▓реЗрдХрд┐рди рд╕рд╛рдЗрдЯрдореИрдк рдореЗрдВ рдХреЗрд╡рд▓ 'abc'
рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдбреЗрд╡рд▓рдкрд░ excludeFromSitemap
рд╕реЗ true
рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ ==='xyz'
рдореЗрдВ getStaticProps
ред
рд╕рд╛рде рд╣реА, SSR рдФрд░ рд╕реНрдерд┐рд░ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП, рдкреГрд╖реНрда рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ (рдпрд╛рдиреА export const excludeFromSitemap = true;
) рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ getServerProps
, getStaticPaths
рдФрд░ getStaticProps
рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
SSG рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдпрджрд┐ рдирд┐рд░реНрдпрд╛рддрд┐рдд excludeFromSitemap
рд╕реНрдерд┐рд░рд╛рдВрдХ (рдкреГрд╖реНрда рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рд╣реИ рдФрд░ рд╡рд╣ рдХреБрдВрдЬреА getStaticProps
рдлрд╝рдВрдХреНрд╢рди (рдкрде рд╡рд┐рд╢рд┐рд╖реНрдЯ) рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рднреА рд╣реИ, рддреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЙрд╕ рдкреГрд╖реНрда рдХреЗ рд╕рднреА рдкрдереЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рди рдФрд░ рдкрде рд╡рд┐рд╢рд┐рд╖реНрдЯ excludeFromSitemap
, рдЬрдм getStaticProps
рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ, рддреЛ рдкреГрд╖реНрда рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рддрд╛рдХрд┐ рдПрдХ рдкреГрд╖реНрда export cosnt excludeFromSitemap = true
рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрде рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рд╛рдЗрдЯрдореИрдк рд╕реЗ рд╕рднреА рдкрдереЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getStaticProps
рдореВрд▓реНрдп false
рд╕реЗ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдореЗрдВ excludeFromSitemap
рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВ)ред
рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛ (рдореИрдВрдиреЗ рд╕рддреНрдп рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЧрдгрдирд╛ рдХреА рдФрд░ рдХрд░реНрдгрдШ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдиреНрдпреВрдирддрдо рдмреВрд▓рд┐рдпрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХреА):
//...somewhere else
const validExcludeFromSitemapTypes = ['boolean','undefined'];
//...for each path
const isSSG = !!getStaticPropsReturnedObj && typeof getStaticPropsReturnedObj === "object";
if(
validExcludeFromSitemapTypes.indexOf(typeof pageExports.excludeFromSitemap)<0 ||
(isSSG && validExcludeFromSitemapTypes.indexOf(typeof getStaticPropsReturnedObj.excludeFromSitemap)<0)
) {
throw new Error("'excludeFromSitemap' can either be ommited (undefined) or be a boolean");
}
const defaultExcludedValue = !!pageExports.excludeFromSitemap;
const hasSpecificExcluded = isSSG && typeof getStaticPropsReturnedObj.excludeFromSitemap !== "undefined";
const specificExcludedValue = isSSG ? !!getStaticPropsReturnedObj.excludeFromSitemap : false;
if(!specificExcludedValue && (!defaultExcludedValue || hasSpecificExcluded))
sitemapURIs.push(correctlyEncodedURI);
рд╕рд░рдгреА рдХреЛ рд╕рд╛рдЗрдЯрдореИрдк рдореЗрдВ рдмрджрд▓рдирд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ (рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╕рд░рдгреА рдореЗрдВ рдпреВрдЖрд░рдЖрдИ рдкрд╣рд▓реЗ рд╕реЗ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИрдВ рдФрд░ !excludeFromSitemap
рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ):
function createSitemap(sitemapURIs: string[]): string {
return `<sitemapindex>${sitemapURIs.map(u=>`<sitemap><loc>u/loc></sitemap>`).join('')}</sitemapindex>`;
}
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмреИрдареЗрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдорд┐рд╢рди рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ 100 рдПрд╕рдИрдУ рд╕реНрдХреЛрд░ рджреЗрдирд╛ рд╣реИ рдФрд░ sitemap.xml
рд╣реЛрдиреЗ рд╕реЗ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реЗрдЧреА! ( robots.txt
рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ else
рдЬреЛрдбрд╝рдХрд░ рднреА рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╛рдЗрдЯрдореИрдк рд╕рд░рдгреА рдореЗрдВ рдкрде рдЬреЛрдбрд╝рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрд╕ рдкрде рдХреЛ рдЕрд╕реНрд╡реАрдХреГрдд рдкреГрд╖реНрдареЛрдВ рдХреА рдПрдХ рдФрд░ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХреЗ)
рд╡рд░реНрддрдорд╛рди рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, unstable_getStaticPaths
рдХреЗ рд╕рд╛рде unstable_getStaticProps
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдк /api/
рдореЗрдВ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЪреВрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдФрд░ рд╕реНрдерд┐рд░ рдкреНрд░реЙрдкреНрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдкрде рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрдкреВрд░реНрддрд┐ рдирд╣реАрдВ рдХрд░рдиреА рд╣реИ (рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдПрд╕рдПрд╕рдЖрд░ рдХреЛ рдХреИрд╢ рдХреЗ рд╕рд╛рде рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрднреА рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ!) рдпрд╛ рдПрд╕рдПрд╕рдЬреА рдХреЗ рдмрдЬрд╛рдп рдПрд╕рдПрд╕рдЖрд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред
рд╢рд╛рдпрдж рдпрд╣ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЛрдЧрд╛? рдореИрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдореИрдВрдиреЗ рдХрд╣реАрдВ рдФрд░ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрдврд╝рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрд╕рдПрд╕рдЖрд░ рдФрд░ /api
рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде http рдЕрдиреБрд░реЛрдз рдХреЛ рд╢реЙрд░реНрдЯрдХрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдпрд╣рд╛рдВ рднреА рдХрд╛рдо рдЖрдПрдЧрд╛ред
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд┐рд▓реНрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдХреЛрдб рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛, рдЬреЛ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ/рдбреАрдмреА рдХреЙрд▓ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЛрдЧрд╛ред
@reckter рд╣рд╛рдБ, рдореИрдВрдиреЗ рдЕрднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдЕрдкрдиреЗ рдбреАрдмреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ рдкреГрд╖реНрда рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдЬрдмрдХрд┐ рд╡реЗ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдереЗред рдмрд╣реБрдд рдЕрдЬреАрдм рд▓рдЧрд╛...
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ
рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдк next.config рдпрд╛ рдХреБрдЫ рдФрд░ рд╕реЗ рд╕реЗрдЯрдЕрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...
@reckter рдПрд╕рдПрд╕рдЬреА/рдПрд╕рдПрд╕рдЖрд░ рд╕реЗ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧреЛрдВ рдкрд░ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╢реЙрд░реНрдЯрдХрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛! рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдкрд░ рдЦреБрдж рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред
рд╡реИрд╕реЗ рднреА, рдПрд╕рдПрд╕рдЬреА рдХреЗ рджреМрд░рд╛рди рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реНрдерд┐рд░ рдкреГрд╖реНрдареЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ /api
рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реЛ! рддреЛ рдирд┐рд░реНрдорд╛рдг рдХрджрдо рд╣реЛрдВрдЧреЗ:
/api
рдорд╛рд░реНрдЧреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИunstable_getStaticPaths
unstable_getStaticProps
рдЪрд▓рд╛рдПрдБ@reckter рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдЗрд╕реЗ рд╕реАрдзреЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ http рдХрд╛рд░рдгреЛрдВ рдкрд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрд╣реБрдд рд╕реЗ рдУрд╡рд░рд╣реЗрдб рд╕реЗ рднреА рдмрдЪрддрд╛ рд╣реИред
рдореВрд▓ рд░реВрдк рд╕реЗ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
import myDb from 'mydatabaseprovider'
const db = myDb()
export default async (req, res) => {
cont myData = await db.query('posts')
res.json(myData)
}
рдЖрдк рдЗрд╕реЗ рдЗрд╕рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗ:
import myDb from 'mydatabaseprovider'
const db = myDb()
export async function getData() {
const myData = await db.query('posts')
return myData
}
export default (req, res) => {
const myData = await getData()
res.json(myData)
}
рдФрд░ рдлрд┐рд░ рдЕрдкрдиреЗ рдкреЗрдЬ рдореЗрдВ:
import {getData} from './api/myfunction'
export async function getStaticProps() {
const myData = await getData()
return {
props: {
myData
}
}
}
рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрд░рдИрдПрд╕рдЯреА рдХреЗ рд▓рд┐рдП рднреАред
рдПрдкреАрдЖрдИ рдХреЙрд▓! = рдбреАрдмреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ (рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ)
рдПрдкреАрдЖрдИ рдкрд░рдд рдореЗрдВ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛, рдбреЗрдЯрд╛ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛, рдЖрджрд┐ред
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ pages/api
рдХреЙрд▓ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реИрдВ... рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреАрдЖрдИ рдХрд╛ рдмрд╛рдИрдкрд╛рд╕ рдЖрд╕рд╛рди рдпрд╛ рд╕рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдФрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб/рдЬрдЯрд┐рд▓рддрд╛ рдЖрдИрдПрдордУ рдХреЗ рд▓рд┐рдП рд╢реБрд▓реНрдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
рд╕рд╛рде рд╣реА рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдПрдкреАрдЖрдИ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдПрдЧреАред рдЕрдкрдиреЛрдВ рдХреЗ рд╕рд┐рд╡рд╛
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП unstable_getStaticPaths
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкреГрд╖реНрда рдкреБрдирдГ рд▓реЛрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Redux рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдЦреЛ рдЬрд╛рддреА рд╣реИред рдХреНрдпрд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛рдПрдЧрд╛?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдпрд╛ рд░рд╛рдЙрдЯрд░ рдореЗрдВ as
рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
<Link
href='/item/[key]'
as={`/item/${itemName}`}
>
router.push(
'/item/[key]',
`/item/${itemName}`
);
@meesvandongen рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реЗ рдРрд╕рд╛ рд╣реА рдерд╛ред рдпрджрд┐ рдЖрдкрдХрд╛ <Link>
рдЕрдорд╛рдиреНрдп рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХреЛ рдмреИрдХрдПрдВрдб рднрд╛рдЧ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдореВрд▓ рд░реВрдк рд╕реЗ <a>
рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред [key]
рдЬреИрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рдЕрдВрд╢реЛрдВ рдХреЛ рд╕рдВрдЧрдд рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
@reaktivo
pages/[lang]/blog/[id].js
->getStaticPaths
рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА url рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
https://github.com/zeit/next.js/issues/9524#issuecomment -562625858
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕реЗ index.js рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП getStaticPaths
рдФрд░ getStaticProps
рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рдХреБрдЫ mdx рдкреГрд╖реНрда рд╣реИрдВ, рддреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ
рд╕реНрдерд┐рд░ getStaticPaths
getStaticProps
рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рдЙрдирдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред https://github.com/zeit/next.js/issues/9524#issuecomment -558617056
рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдкреГрд╖реНрда рдХреЛ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЙрдЪреНрдЪ-рдЖрджреЗрд╢ рдШрдЯрдХ (HOC) рджреНрд╡рд╛рд░рд╛ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреЛрдб рдЕрдзрд┐рдХ рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЧреНрдп рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдЯреНрд░реА-рд╣рд┐рд▓рд┐рдВрдЧ рдмрдирд╛рдо рдбрд╛рдпрдиреЗрдорд┐рдХред рдХреНрдпрд╛ рд╕рд┐рд░рджрд░реНрдж рд╡реНрдпрд╛рдкрд╛рд░-рдмрдВрдж рд╣реИредЁЯШВ
9.2.3-canary.13
рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ getStaticPaths рдореЗрдВ fallback: false
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛:
return {
fallback: false,
paths: slugs.map(slug => ({params: {slug: slug}}))
}
рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:
Error: Extra keys returned from unstable_getStaticPaths in /blog/[slug] (fallback) Expected: { paths: [] }
9.2.3-canary.13
рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ getStaticPaths рдореЗрдВfallback: false
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛:return { fallback: false, paths: slugs.map(slug => ({params: {slug: slug}})) }
рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:
Error: Extra keys returned from unstable_getStaticPaths in /blog/[slug] (fallback) Expected: { paths: [] }
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдирдХреНрд╢рд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореМрдЬреВрдж рд╡рд╕реНрддреБ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕реНрд▓рдЧ рдХреЗ рд╕рд╛рдеред рдкрдереЛрдВ рдореЗрдВ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рдмрдЬрд╛рдпред
рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдиреЗрдХреНрд╕реНрдЯрдЬ рдкрд░ рдЕрдкрдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
return data.map(item => {
return {
params: {
slug: item.slug,
},
}
})
@jorngeorg рдпрд╣ рдПрдХ рдЦреБрд▓рд╛ рдкреАрдЖрд░ рд╣реИ: https://github.com/zeit/next.js/pull/10701
рд╢рд╛рдирджрд╛рд░ рдпреЛрдЧрджрд╛рди! рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдереИрддрд┐рдХ рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдбреЙрдХреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧреЛрдВ рдкрд░, "рдлрд╝реЙрд▓рдмреИрдХ" рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреЙрд▓ рдХреЗ getStaticProps
рдЙрддреНрдкрдиреНрди рд╣реЛ рдЬрд╛рдПрдЧрд╛ - рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдкреНрд░реЛрдк рдЦрд╛рд▓реА рд╣реИред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЖрдк рдлрд╝реЙрд▓рдмреИрдХ рдмрдирд╛рддреЗ рд╕рдордп рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджрд░реНрдн рдХреЗ getStaticProps
рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рдмрд╛рдд рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ рдХрд┐ next export
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП /p/[id].js
рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджрд░реНрдн рдХреЗ getInitialProps
рдЪрд▓рд╛рдХрд░ /p/[id].html
рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
getStaticProps
-next build
рд╕рдордп рдкрд░ рд╕реНрдерд┐рд░ рдкреАрдврд╝реА (рдПрд╕рдПрд╕рдЬреА) рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВредgetServerProps
- рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ (SSR) рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВ рдЬреЛ рдСрди-рдбрд┐рдорд╛рдВрдб рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИред
getServerProps рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ getServerSideProps рдХрд░реЗрдВред
рдореИрдВ рдбреЙрдХреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧреЛрдВ рдкрд░, "рдлрд╝реЙрд▓рдмреИрдХ" рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреЙрд▓ рдХреЗ
getStaticProps
рдЙрддреНрдкрдиреНрди рд╣реЛ рдЬрд╛рдПрдЧрд╛ - рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдкреНрд░реЛрдк рдЦрд╛рд▓реА рд╣реИред
рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ! рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдмрд┐рд▓реНрдб/рддреИрдирд╛рддреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рднреА рдереАрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реИред
рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП RFC рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛
@timneutkens
- рдЙрд╕реА рдкрде рдХреЗ рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рдкреГрд╖реНрда рдХреА рд╕реЗрд╡рд╛ рдХрд░реЗрдВрдЧреЗ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ Next.js рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреЗрдЬ рдХреЛ рдХреИрд╢ рдХрд░реЗрдЧрд╛? рдХреНрдпрд╛ рдпрд╣ рдЗрди-рдореЗрдореЛрд░реА рдХреИрд╢ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдХреИрд╢ рд╕реАрдорд╛ рд╕реЗ рдмрдВрдзрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдЬрдм рдЖрдк next start
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдХреИрд╢рд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди lru-cache рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реАрдорд╛ 50MB рд╣реИ, рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/zeit/next.js/ рдмреНрд▓реЙрдм/рдХреИрдирд░реА/рдкреИрдХреЗрдЬ/рдиреЗрдХреНрд╕реНрдЯ/рдиреЗрдХреНрд╕реНрдЯ-рд╕рд░реНрд╡рд░/рд╕рд░реНрд╡рд░/spr-cache.ts#L90
рдЬрдм рдЖрдк ZEIT Now рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕реАрдбреАрдПрди/рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рдкреАрдврд╝реА рдФрд░ рдХреИрд╢рд┐рдВрдЧ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдпрд╛ рдпрджрд┐ рдЖрдк lru рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
рдареАрдХ рд╣реИ, рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред рдПрдХ рд╕рдордЭрджрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░реЗ рдорди рдореЗрдВ рдХрдореЛрдмреЗрд╢ рдпрд╣реА рдерд╛ред
getStaticProps
-next build
рд╕рдордп рдкрд░ рд╕реНрдерд┐рд░ рдкреАрдврд╝реА (рдПрд╕рдПрд╕рдЬреА) рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВредgetServerProps
- рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ (SSR) рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВ рдЬреЛ рдСрди-рдбрд┐рдорд╛рдВрдб рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИредрезрежренреиреи
getServerProps рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ getServerSideProps рдХрд░реЗрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд╛рдо рдмрджрд▓реЗрдВ рдХреНрдпреЛрдВ? IMHO getServerProps рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдЯреАрдХ рдФрд░ рдЫреЛрдЯрд╛ рд╣реИ, рд╕рд╛рдЗрдб рдЬреЛрдбрд╝рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдмреЗрдорд╛рдиреА рд▓рдЧрддрд╛ рд╣реИред
рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ GetStaticPaths рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдореЗрд░реЗ рдЧрддрд┐рд╢реАрд▓ рдкреГрд╖реНрда рдЕрдм рд╕реНрдерд┐рд░ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрдм рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рд╣реВрдВ рдЬрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдм рдпрд╣ рд╣реИ рдХрд┐ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдкреГрд╖реНрда рдПрдХ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ? (рдЬреИрд╕рд╛ рдХрд┐ рдлрд╝реЙрд▓рдмреИрдХ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)
@erhankaradeniz getStaticPaths
рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдкрдХрд╛ рдкреГрд╖реНрда рд▓реИрдореНрдмрдбрд╛рд╕ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЙрдкрдпреЛрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реИред
рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рдХреЛрдб рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд╕рдХреЗрдВ?
@Timer рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рд╡рд╛рдкрд╕ [email protected] рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рдкреИрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрдм рддрдХ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рддрд╛ рдХрд┐ рдпрд╣ рдкрдереЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореИрдВрдиреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкрдиреЗ рдкрде рддреИрдпрд╛рд░ рдХрд┐рдП рд╣реИрдВ:
return cityData.map(city => {
return {
params: {
country: city.countrySlug,
city: city.slug,
},
}
})
рдФрд░ рдПрдХ рдЕрдиреНрдп рдкреГрд╖реНрда рдореЗрдВ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ:
return cityData.map(city => {
return {
params: {
country: city.countrySlug,
city: city.slug,
},
}
})
рдкрдереЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдирдИ рдХреИрдирд░реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдмрджрд▓рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ getStaticPath
рднреАрддрд░ рднреА рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ
рдореБрдЭреЗ рдиреЗрд╕реНрдЯреЗрдб рдкрде рдкреНрд░реАрд░реЗрдВрдбрд░рд┐рдВрдЧ рдФрд░ рдПрд╕рдПрд╕рдЬреА рд╕реЗ рдкрд░реЗрд╢рд╛рдиреА рд╣реИ:
// pages/[lang]/[...slugs].js
export async function getStaticPaths() {
let knex = await import("knex/client").then(m => m.default)
let pages = await knex("page").select(["lang", "url"])
return {
fallback: true,
paths: pages.map(page => {
return {
params: {
lang: page.lang,
slugs: page.url == "/" ? [] : page.url.slice(1).split("/"),
}
}
}),
}
}
рдлрд▓рд╕реНрд╡рд░реВрдк рд╣реЛрддрд╛ рд╣реИ
Error occurred prerendering page "/en/". Read more: https://err.sh/next.js/prerender-error:
Error: The provided export path '/en/' doesn't match the '/[lang]/[...slugs]' page.
рд╣реЛрдо рдкреЗрдЬ рдХреЗ рд▓рд┐рдПред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ NextJS рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ
{lang: "en", slugs: []}
рдкреНрд░рддрд┐
/[lang]/[...slugs]
рдЕрдЧрд░ рдореИрдВ {lang: "en", slugs: ["/"]}
рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдмрдирд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЧрд▓рдд рдпреВрдЖрд░рдПрд▓ рдХреЗ рд╕рд╛рде:
тФЬ тЧП /[lang]/[...slugs] 875 B 204 kB
тФЬ тФЬ /en/credits
тФЬ тФЬ /en/%2F
рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, getServerSideProps
рд╕рдорд╛рди рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдзрд╛рдЧрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рд╣реИ рдирд╛?
pages/[lang]/[...slugs].js
рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ /en/abcdef
рди рдХрд┐ /en
, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ pages/[lang]/index.js
ред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдЦреБрд▓рд╛ рд╣реИ: https://github.com/zeit/next.js/issues/10488
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рддреЛ рдпреЗ рдХрдорд╛рд▓ рд╣реИред рдореИрдВ Next.js рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдореИрдВ рдЕрдВрддрддрдГ Gatsby.js рд╕реЗ рджреВрд░ рдЬрд╛ рд╕рдХреВрдВ рдФрд░ рдПрдХ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдРрдк (рд╕реНрдерд┐рд░ + рдЧрддрд┐рд╢реАрд▓) рд╣реЛред
ЁЯЪА рдореИрдВрдиреЗ рдХреИрдирд░реА рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЖрдзрд╛ рдмреЗрдХреНрдб рдЬрдЯрд┐рд▓ рдРрдк рд╕рдВрд╕реНрдХрд░рдг рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЯреНрд░реА-рд╣рд┐рд▓рд┐рдВрдЧ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╣реИред
ЁЯдФ getStaticPaths
рдмрд╣реБрдд рдЕрдзрд┐рдХ setStaticPaths
рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо SSG рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдкрде рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдиреЗ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ред
ЁЯзР рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реЗрдЯрдЕрдк рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд╕рдордЭрд╛рдиреЗ рджреЛ:
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ setBuildCategory
рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдЗрд╕реЗ blog
рдпрд╛ pages
рдпрд╛ рдЬреЛ рднреА рдХреЛрдИ 2020-content
рдЪрд╛рд╣рддрд╛ рд╣реИред рддрдм SSG рдирд┐рд░реНрдорд╛рддрд╛ рдЙрд╕ рдкреГрд╖реНрда рдХреА рд╢реНрд░реЗрдгреА рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕ рд╢реНрд░реЗрдгреА рдХреЛ рдХреИрд╢ + рдирдП рд░реЗрдВрдбрд░ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХреБрдЫ рд╣рдореЗрдВ SSG рдХреЛ рддреЗрдЬрд╝ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрди рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рд╕реЗ рдмрдЪ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдЧрд░ рдпрд╣ рдХреБрдЫ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ; рдПрдХ рдХреЙрд▓ рдкрд░ рдХреВрджрдиреЗ рдФрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИред
рдХрд╕реНрдЯрдо рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде getServerSideProps
рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ?
if (pathname === '/a') {
app.render(req, res, '/b', query)
}
рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, /a
рд╕реЗ рдкреЗрдЬ pages/b.js
рд░реЗрдВрдбрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди /a
рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди a.json
рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ JSON рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП /_next/data/{BUILD_ID}/{PAGE}.json
рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╢рд░реНрддреЗрдВ рд░рдЦрдиреА рдЪрд╛рд╣рд┐рдП?
GetStaticPaths рдореЗрдВ fallback: true
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ req рдСрдмреНрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВ? рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдорд╛рд░реНрдЧ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдХреБрдЫ рдХреБрдХреАрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
@tylermcrobert рдЬрдм рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдк рдХреБрдХреАрдЬрд╝ рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ ?!
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдЧрдВрддреБрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмреИрдХрдПрдВрдб рд╡рд╛рд▓реЗ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ "рд╕реНрдерд┐рд░" рдФрд░ "рдЧрддрд┐рд╢реАрд▓" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдЖрдк рд╕реНрдерд┐рд░ рдФрд░ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ... рдпрд╣ рдХреЗрд╡рд▓ рд▓реЗрдЦ рдХрд╛ рднрд╛рдЧ рд╣реИ рдЬреЛ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмрдЬрд╛рдп API рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдЧрд╛ред
рдХрд╕реНрдЯрдо рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде
getServerSideProps
рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ?if (pathname === '/a') { app.render(req, res, '/b', query) }
рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
/a
рд╕реЗ рдкреЗрдЬpages/b.js
рд░реЗрдВрдбрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди/a
рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рдиa.json
рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИредрдХреНрдпрд╛ рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ JSON рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
/_next/data/{BUILD_ID}/{PAGE}.json
рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╢рд░реНрддреЗрдВ рд░рдЦрдиреА рдЪрд╛рд╣рд┐рдП?
Next.js рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╕рд░реНрд╡рд░ рдореЗрдВ рд░реАрдореИрдкрд┐рдВрдЧ рдХреА рдЕрдм рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: https://nextjs.org/docs/routing/dynamic-routes
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг <Link>
рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдПрдХ рдкреВрд░реНрдг рдкреГрд╖реНрда рд╕рдВрдХреНрд░рдордг рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛) рдЗрд╕рд▓рд┐рдП getServerSideProps рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@tylermcrobert рдЬрдм рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдк рдХреБрдХреАрдЬрд╝ рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ ?!
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдЧрдВрддреБрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмреИрдХрдПрдВрдб рд╡рд╛рд▓реЗ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ "рд╕реНрдерд┐рд░" рдФрд░ "рдЧрддрд┐рд╢реАрд▓" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдЖрдк рд╕реНрдерд┐рд░ рдФрд░ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ... рдпрд╣ рдХреЗрд╡рд▓ рд▓реЗрдЦ рдХрд╛ рднрд╛рдЧ рд╣реИ рдЬреЛ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмрдЬрд╛рдп API рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдЧрд╛ред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЧрд▓рдд рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдБред рдЖрдк рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдЬрдм рдХреЛрдИ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рд░реНрдЧ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрдпрд╛ fallback: true
рдирд╣реАрдВ рд╣реИ? рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдлрд╝реЙрд▓рдмреИрдХ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдирд╣реАрдВ?
@tylermcrobert рд╣рд╛рдБ fallback: true
рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЕрдиреБрд░реЛрдз рд╣реИ рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ рдХреЛ "рд╕рдмрд╕реЗ рдХрдо рдЖрдо рднрд╛рдЬрдХ" рджреНрд╡рд╛рд░рд╛ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдореИрдВ рдПрдХ рдРрд╕реА рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдХреА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдкрд░рд┐рд╕рд░ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкрд░рд┐рд╕рд░ рдХреЗ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдпрд╣ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдкрджрд╛ рд╣реЛрдЧреАред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрди рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдмрд┐рд▓реНрдбреЛрдВ рдХреЛ рдЕрднреА рднреА рдмрд┐рд▓реНрдб рдХреЗ рдмреАрдЪ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддреЛ рдкрд╣рд▓реЗ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХреА рднреВрдорд┐рдХрд╛ рд╕рднреА рдкрд░рд┐рдгрд╛рдореА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧреА! рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд▓рдЧрддрд╛ рд╣реИред
@ ivan-kleshnin рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореЗрд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдХрд╛рд░рдг рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВред
рдореИрдВ рдПрдХ рд╣реЗрдбрд▓реЗрд╕ рд╕реАрдПрдордПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЬрд┐рди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЙрдиреНрд╣реЗрдВ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдХрд▓реНрдк рдЖрдПрдЧрд╛ред
рдЙрд╕ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдПрдкреАрдЖрдИ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд░реЗрдлрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХреБрдХреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ useStaticProps
рд╕реНрдХреНрд░реИрдк рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВ рд╕реНрдерд┐рд░ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд╛рдн рдХреЛ рдЦреЛрдиреЗ рд╕реЗ рдирдлрд░рдд рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдЧреИрдЯреНрд╕рдмреА рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдкрд░ рдЗрд╕ рдЖрд░рдПрдлрд╕реА рдХрд╛ рдЖрдХрд░реНрд╖рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде "рд╣рд╛рдЗрдмреНрд░рд┐рдб рдирд┐рдпрдВрддреНрд░рдг" рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣реЗрдбрд▓реЗрд╕ рд╕реАрдПрдордПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рджрд░реНрдж рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
рдореИрдВ рдПрдХ рд╣реЗрдбрд▓реЗрд╕ рд╕реАрдПрдордПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЬрд┐рди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЙрдиреНрд╣реЗрдВ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдХрд▓реНрдк рдЖрдПрдЧрд╛ред
рдмрдиреЗ рд░рд╣реЗрдВ, рдФрд░ рдЬрд▓реНрдж рд╣реА
рддреЛ рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рд╣рдо рдлрд╝реЙрд▓рдмреИрдХ рд╕рддреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ (рдХреЛрдИ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдирдпрд╛ рдкреГрд╖реНрда/рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ) рд▓реЗрдХрд┐рди рдЬрдм рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡рд┐рдЬрд╝рд┐рдЯ рдорд┐рд▓рддреА рд╣реИ рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ?
рдПрд░реНрд╣рд╛рди рдХрд░рд╛рдбреЗрдирд┐рдЬрд╝
http://www.erhankaradeniz.com
рек рдорд╛рд░реНрдЪ реирежреиреж рдХреЛ реиреж:реирел рдмрдЬреЗ рдЯрд┐рдо рдиреНрдпреВрдЯрдХреЗрдиреНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рдореИрдВ рдПрдХ рд╣реЗрдбрд▓реЗрд╕ рд╕реАрдПрдордПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЬрд┐рди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЙрдиреНрд╣реЗрдВ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдХрд▓реНрдк рдЖрдПрдЧрд╛редрдмрдиреЗ рд░рд╣реЗрдВ, рдФрд░ рдЬрд▓реНрдж рд╣реА
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдПрдХ рдЦрд░рд╛рдм рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЙрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЛ рд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдлрд╝реЙрд▓рдмреИрдХ рдСрди-рдбрд┐рдорд╛рдВрдб рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рд╢реАрд░реНрд╖ 100 рдмреНрд▓реЙрдЧрдкреЛрд╕реНрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдХрдо рдЯреНрд░реИрдлрд╝рд┐рдХ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд▓реНрдж рд╣реА рдбреЙрдХреНрд╕ рдЙрддрд╛рд░реЗ рдЬрд╛рдПрдВрдЧреЗред
рд╣рд╛рдБ рдореЗрд░рд╛ рдорддрд▓рдм рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдкреЗрдЬ рдерд╛ .. рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдкрд░ рдпреВрдЬрд░рдбреЗрдЯрд╛ рд▓рд╛рдКрдВрдЧрд╛ред
@timneutkens рдХреНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдпрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛?
рдирдорд╕реНрддреЗ!!! рдЗрд╖реНрдЯрддрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рддрд░рд╣ рдзреНрд╡рдирд┐ред рдореБрдЭреЗ рд░рд┐рдПрдХреНрдЯ рдФрд░ рдиреЗрдХреНрд╕реНрдЯ рджреЛрдиреЛрдВ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИ !!! рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕реБрдВрджрд░ рдФрд░ рд╕рд░рд▓ рдмрдирд╛ рджрд┐рдпрд╛ !! рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдзрд╛рд░рдгрд╛ рдмреНрд▓реЙрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИред рдореИрдВ рдПрдХ рд╣реЗрдбрд▓реЗрд╕ рд╕реАрдПрдордПрд╕ рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░рддреЗ рд╕рдордп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐ рдкреГрд╖реНрда/рдкреЛрд╕реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
// рдЪреАрдпрд░реНрд╕, рдЪреВрдВрдХрд┐ рдпрд╣ рд╢реБрдХреНрд░рд╡рд╛рд░ рдХреЗ рдХрд░реАрдм рд╣реИ !!!
@timneutkens рдпрд╣ рд░реЛрдорд╛рдВрдЪрдХ рд╣реИ
рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рдЬрд┐рд╕реЗ рд╣рдо рдЕрдХреНрд╕рд░ рд╣рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ next.js рдпрд╛ gatsby рдХреЗ рд╕рд╛рде рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдЯ рдпрд╛ рд▓реВрдк рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ:
рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣рдореЗрдВ рдХрдИ рдбреЛрдореЗрди (рдФрд░ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдХреЛрдИ рднреВрдЦ рдирд╣реАрдВ рд╣реИ) рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг, рдореБрджреНрд░рд╛, рд╕рдорд░реНрдерди рдлреЛрди рдирдВрдмрд░ рдФрд░ рднрд╛рд╖рд╛ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╕рдорд╛рди/рд╕рдЯреАрдХ рдкреГрд╖реНрдареЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрд╡рднрд╛рд╡ рд╕реЗ рдЙрди рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рдкреЗрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрд╣реБрдд рд╕реНрдерд┐рд░ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рджреИрдирд┐рдХ рдпрд╛ рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ (рдмрдирд╛рдо рдЙрдиреНрд╣реЗрдВ рд╣рд░ рдЕрдиреБрд░реЛрдз рдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред
рдореЗрд░рд╛ рдкреНрд░рд╢реНрди/рд╡рд┐рдЪрд╛рд░: рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ (рднрд╡рд┐рд╖реНрдп рдореЗрдВ?) getStaticPaths
рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреГрд╖реНрда рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдорд╛рд░реНрдЧ рдкрд░рдо рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рд╕реНрддрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди locale
рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдерд┐рд░, рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ)
рдХрдВрдХреНрд░реАрдЯ рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ https://mysite.com/my-product
рдФрд░ https://mysite.co.uk/my-product
рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд┐рд░ рдкреГрд╖реНрдареЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрдкрдирд╛ рдЕрдЧрд▓рд╛ рдРрдк 50x рдмрд╛рд░ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╛ рд╣рд░ рдЕрдиреБрд░реЛрдз рдкрд░ рдПрдХ рд╕реАрдПрдордПрд╕ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАЁЯШЕ
рдЕрдЧреНрд░рд┐рдо рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ / рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ тЭдя╕П
рдореИрдВ рдПрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдПрд╕рдИрдУ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ-рдЯреНрд░реИрдлрд┐рдХ рд▓реИрдВрдбрд┐рдВрдЧ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕рд░реНрд╡рд░ рд▓реЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛ рдХреЛ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХреЗ рдмрд╛рдж рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ рдкрд░ рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?
рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ рдкрд░, рд╡реНрдпрд╡рд╣рд╛рд░ getInitialProps
рдЬреИрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдкреГрд╖реНрда рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдФрд░ рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ рдкрд░, рд╕реНрдерд┐рд░ рдПрдЪрдЯреАрдПрдордПрд▓ рдкрд░реЛрд╕рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣рд╛рдЗрдбреНрд░реЗрдЯреЗрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ) рдкреГрд╖реНрда рдкрд░ рдХреБрдЫ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
рдореИрдВрдиреЗ рдмрд╕ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП unstable_getStaticProps
рд╕рд╛рде рдЦреЗрд▓рд╛ рдФрд░ рдореИрдВ рдПрдХ рдордЬреЗрджрд╛рд░ рд╕рдВрдШрд░реНрд╖ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛: getStaticProps
рд╕рд╛рде рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдХреЛрдб рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рд╡рд╛рд╣:
// pages/api/healthcheck.ts
import { NextApiResponse, NextApiRequest } from 'next';
export type ApiHealthCheckResponse = {
message: 'ok';
};
const healthCheckHandler = (
req: NextApiRequest,
res: NextApiResponse<ApiHealthCheckResponse | ''>,
) => {
if (req.method === 'GET') {
return res.status(200).json({ message: 'ok' });
}
return res.status(405).send('');
};
export default healthCheckHandler;
// pages/index.js
// ...
export async function unstable_getStaticProps() {
return {
props: {
healthcheck: (await fetch('localhost:3000/api/healthcheck').json())
},
};
}
рдкреЗрдЬ рдмрд┐рд▓реНрдб рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡реИрдз рдЙрдкрдпреЛрдЧрдХреЗрд╕ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ getStaticProps
рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдЧрддрд┐рд╢реАрд▓ рдЪреАрдЬ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдПрдЬрдХреЗрд╕ рдерд╛ (рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░реВрдЯ рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдкреНрд░рднрд╛рд░реА рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреАрдЖрдИ рд╕реЗ рдбреЗрдЯрд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░реЗрдВред
@martpie рдЖрдк рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ: https://github.com/zeit/next.js/issues/9524#issuecomment -589772756
рдиреЗрдХреНрд╕реНрдЯ-рдЬреЗрди рд╕реНрдЯреЗрдЯрд┐рдХ рд╕рд╛рдЗрдЯ рдЬреЗрдирд░реЗрд╢рди (SSG) рд╕рдкреЛрд░реНрдЯ рдиреЗрдХреНрд╕реНрдЯ.js 9.3 рдореЗрдВ рд╕реНрдЯреЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!
рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ "рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЛрдб" рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рдпрд╛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдХреЛ рдСрди-рдбрд┐рдорд╛рдВрдб рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рдбреЙрдХреНрд╕ рдореЗрдВ рдХреВрджреЗрдВ!
рдХреГрдкрдпрд╛ рдХрд┐рд╕реА рднреА рдкреНрд░рд╢реНрди рдХреЛ Next.js GitHub рд╕рдореБрджрд╛рдп рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ!
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ! рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдЕрдм рдЧрд╛рдерд╛ рдФрд░ рд░реЗрдбрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдиреЗрдХреНрд╕реНрдЯ-рдЬреЗрди рд╕реНрдЯреЗрдЯрд┐рдХ рд╕рд╛рдЗрдЯ рдЬреЗрдирд░реЗрд╢рди (SSG) рд╕рдкреЛрд░реНрдЯ рдиреЗрдХреНрд╕реНрдЯ.js 9.3 рдореЗрдВ рд╕реНрдЯреЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!
рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ "рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЛрдб" рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рдпрд╛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдХреЛ рдСрди-рдбрд┐рдорд╛рдВрдб рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рдбреЙрдХреНрд╕ рдореЗрдВ рдХреВрджреЗрдВ!