Next.js: рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рдореЗрдВ рдЕрд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА (FOUC) рдХрд╛ рдлреНрд▓реИрд╢ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдордИ 2020  ┬╖  20рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vercel/next.js

рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ

рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ

рдмрдЧ рдХреНрдпрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдгред

Next.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ CSS <head> рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд╛рдЗрдбреНрд░реЗрдЯреЗрдб рдирд╣реАрдВ рд╣реИ рдЬрдм <div id="__next"> рддрддреНрд╡ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред

рдпрд╣ рд╣рдорд╛рд░реЗ рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рдХреЛ рдЪрд▓рд╛рддреЗ рд╕рдордп рдЕрд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА (рдпрд╛ FOUC) рдХреА рдПрдХ рдлреНрд▓реИрд╢ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдареАрдХ рд╣реИ (рдЬреЛ рдореБрдЭреЗ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ)ред

рдкреНрд░рдЬрдирди рдХрд░рдирд╛

рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо, рдХреГрдкрдпрд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдпрд╛ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкреНрд░рджрд╛рди рдХрд░реЗрдВ:

  1. рдЪрд▓рдХрд░ рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди
$ git clone https://github.com/tutorbookapp/covid-tutoring
  1. рд╣рдорд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (рд╣рдорд╛рд░реЗ README.md рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг) рдЪрд▓рд╛рдХрд░:
$ npm i && lerna bootstrap --hoist
  1. рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рдЪрд╛рд▓реВ рдХрд░рдХреЗ:
$ npm run dev
  1. рдкреГрд╖реНрда рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп FOUC рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

рдПрдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рдЬреЛ рдЖрдкрдиреЗ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреА рдереАред

<div id="__next"> рддрддреНрд╡ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрд░реЛрдХреНрдд рддрд╣ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдХреЗ рдмрд╛рдж рд╣реА рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП (рдпрд╛рдиреА рд░рд┐рдПрдХреНрд╢рди рдШрдЯрдХреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╢реИрд▓реА рдХреА рдЪрд╛рджрд░реЗрдВ рдЬреЛ рдКрдкрд░-рдиреАрдЪреЗ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ) <head> рдореЗрдВ рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИрдВ <div id="__next"> рддрддреНрд╡ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ

рдпрджрд┐ рд▓рд╛рдЧреВ рд╣реЛ, рддреЛ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЬреЛрдбрд╝реЗрдВред

рд╣рдорд╛рд░реЗ рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рдкрд░ рджрд┐рдЦрд╛рдИ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ FOUC рджреЗрдЦреЗрдВ:

fouc

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реА рдЙрддреНрдкрд╛рджрди рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИ:

no-fouc

рдкреНрд░рдгрд╛рд▓реА рдХреА рдЬрд╛рдирдХрд╛рд░реА

  • OS: рдЙрдмрдВрдЯреВ 18.04.2
  • рдмреНрд░рд╛рдЙрдЬрд╝рд░: рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 76.0.1
  • Next.js рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг: 9.4.0
  • Node.js рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг: 12.16.1
bug needs investigation

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЙрддреНрдкрд╛рджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдореИрдВ рдЕрднреА рднреА рд╕реНрдЯрд╛рдЗрд▓рдмреНрд▓рдХреЙрдорд░реНрд╕ + рдордЯреЗрд░рд┐рдпрд▓ рдпреВрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдлрдУрдпреВрд╕реА рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рд╕рднреА 20 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рдЬрдм рдореИрдВ рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рд╕реНрдЯрд╛рдЗрд▓-рдЬреЗрдбрдПрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдПрдХ рд╕рдорд╛рди рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ _app.js рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реАрдПрд╕рдПрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдпрд╣ рджреЗрд╡ рдореЛрдб рдореЗрдВ рд╣реИред рдпрд╣ SSR рдХреЛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓рд╛рдкрддрд╛ рд╢реИрд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИред

@robgraeber рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдЯреАрдХ рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рдЖрдк рдХрд░рддреЗ рд╣реИрдВред CSS рдХреЛ рдПрдХ рдЕрд▓рдЧ css рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп _app.js рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдпрд╣рд╛рдБред
рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рд╣реИ: https://github.com/dnaranjo89/next-css-ssr

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрднреА-рдХрднреА рдореИрдВ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реАрдПрд╕рдПрд╕ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЗ рдХрд╛рд░рдг рдкреВрд░реЗ рдкреГрд╖реНрда рдХреА рд╕реАрдПрд╕рдПрд╕ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдмрд░реНрдмрд╛рдж рд╣реЛ рдЬрд╛рддреА рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдРрд╕рд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИ?

@derskeal рдЗрд╕ рд╕реИрд╕ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреЗ рд▓реЗрдЖрдЙрдЯ рдШрдЯрдХ рдореЗрдВ sass рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреА рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ: https://github.com/giuseppeg/styled-jsx-plugin-sass

@Timer рдореИрдВ рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рдЗрд╕ рд░реЗрдкреЛ https://github.com/yanv1991/demo-react-dom , рдЗрд╕ рд╢реИрд▓реА рд▓реЛрдб рдирд╣реАрдВ рд╣реИ prod рдореЛрдб рдореЗрдВ рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд▓реЛрдб рдШрдЯрдХ рдХреЗ рд╕рд╛рде рд╕рд╛рд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмрдирд╛рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ

рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдирд╣реАрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

error - Error [FirebaseError]: projectId must be a string in FirebaseApp.options
    at new FirestoreError (/Users/joe/Desktop/scratch2/covid-tutoring/node_modules/@firebase/firestore/dist/index.node.cjs.js:1223:28)
    at Function.Firestore.databaseIdFromApp (/Users/joe/Desktop/scratch2/covid-tutoring/node_modules/@firebase/firestore/dist/index.node.cjs.js:21018:19)
    at new Firestore (/Users/joe/Desktop/scratch2/covid-tutoring/node_modules/@firebase/firestore/dist/index.node.cjs.js:20850:42)
    at /Users/joe/Desktop/scratch2/covid-tutoring/node_modules/@firebase/firestore/dist/index.node.cjs.js:22871:66
    at Component.instanceFactory (/Users/joe/Desktop/scratch2/covid-tutoring/node_modules/@firebase/firestore/dist/index.node.cjs.js:22410:16)
    at Provider.getOrInitializeService (/Users/joe/Desktop/scratch2/covid-tutoring/node_modules/@firebase/component/dist/index.cjs.js:219:39)
    at Provider.getImmediate (/Users/joe/Desktop/scratch2/covid-tutoring/node_modules/@firebase/component/dist/index.cjs.js:120:33)
    at FirebaseAppImpl._getService (/Users/joe/Desktop/scratch2/covid-tutoring/node_modules/@firebase/app/dist/index.node.cjs.js:228:49)
    at FirebaseAppImpl.firebaseAppImpl.<computed> [as firestore] (/Users/joe/Desktop/scratch2/covid-tutoring/node_modules/@firebase/app/dist/index.node.cjs.js:440:39)
    at Object.serviceNamespace [as firestore] (/Users/joe/Desktop/scratch2/covid-tutoring/node_modules/@firebase/app/dist/index.node.cjs.js:420:45)
    at eval (webpack-internal:///./src/firebase/db.tsx:19:124)
    at Module../src/firebase/db.tsx (/Users/joe/Desktop/scratch2/covid-tutoring/.next/server/static/development/pages/_app.js:128:1)
    at __webpack_require__ (/Users/joe/Desktop/scratch2/covid-tutoring/.next/server/static/development/pages/_app.js:23:31)
    at eval (webpack-internal:///./src/firebase/user.tsx:12:61)
    at Module../src/firebase/user.tsx (/Users/joe/Desktop/scratch2/covid-tutoring/.next/server/static/development/pages/_app.js:152:1)
    at __webpack_require__ (/Users/joe/Desktop/scratch2/covid-tutoring/.next/server/static/development/pages/_app.js:23:31) {
  code: 'invalid-argument',
  toString: [Function]
}

рдпрд╣ next@^9.4.5-canary.15 рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП! рдХреГрдкрдпрд╛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ рдФрд░ рд╣рдореЗрдВ рдмрддрд╛рдПрдВред

рдзрдиреНрдпрд╡рд╛рдж @ рддреИрдореВрд░! ЁЯОЙ рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рд╕рд░реНрд╡рд░ (рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╕рд╛рдЗрдЯ рдкрд░ рдЖрдХрд╕реНрдорд┐рдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдкреГрд╖реНрда) рдореЗрдВ рджреЗрд╡ рдореЛрдб рдФрд░ рдЙрддреНрдкрд╛рджрди рдореЛрдб рджреЛрдиреЛрдВ рдореЗрдВ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рдерд╛ред ^9.4.5-canary.15 рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рддрдп рдХрд┐рдпрд╛!

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВред рдХреИрдирд░реА рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА, рдпрд╣ рджреЗрд╡ рдореЛрдб рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдпрд╣ рдЕрднреА рднреА рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рддрд╛ рд╣реИ?

рдЙрддреНрдкрд╛рджрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ <style data-next-hide-fouc="true">body{display:none}</style> рдЧрд╛рдпрдм рд╣реИред

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВред рдХреИрдирд░реА рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА, рдпрд╣ рджреЗрд╡ рдореЛрдб рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдпрд╣ рдЕрднреА рднреА рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рддрд╛ рд╣реИ?

рдЙрддреНрдкрд╛рджрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ <style data-next-hide-fouc="true">body{display:none}</style> рдЧрд╛рдпрдм рд╣реИред

рдпрд╣рд╛рдБ рднреА, рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реИ рдЬрдм рдпрд╣ рдЙрддреНрдкрд╛рджреЛрдВ рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ?

рдпрд╣рд╛рдБ рднреА, рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реИ рдЬрдм рдпрд╣ рдЙрддреНрдкрд╛рджреЛрдВ рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ?

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдореБрджреНрджрд╛ рдХреЗрд╡рд▓ рджреЗрд╡ рд╡рд┐рдзрд╛ рдореЗрдВ рдШрдЯрд┐рдд рд╣реЛ рд░рд╣рд╛ рдерд╛, рди рдХрд┐ рдЙрддреНрдкрд╛рджрди рд╡рд┐рдзрд╛ рдореЗрдВред рддреЛ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдареЗрд╕ рдХрд╛ рдореБрджреНрджрд╛ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВред рдХреИрдирд░реА рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА, рдпрд╣ рджреЗрд╡ рдореЛрдб рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдпрд╣ рдЕрднреА рднреА рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рддрд╛ рд╣реИ?

рдЙрддреНрдкрд╛рджрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ <style data-next-hide-fouc="true">body{display:none}</style> рдЧрд╛рдпрдм рд╣реИред

рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛? рдХреИрдирд░реА рд░рд┐рд▓реАрдЬ рдиреЗ рд╣рдорд╛рд░реЗ рджреЗрд╡ рдирд┐рд░реНрдорд╛рдг рдХреЛ рддрдп рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рджрди рдЕрднреА рднреА рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИред

рддреЛ рдХреИрдирд░реА рдЕрдЧрд▓реЗ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИ?

рд╣рд╛рдБ @jimmynames , рдХреИрдирд░реА WIP рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИ (рд╢рдмреНрдж рдЬрд╣рд░реАрд▓реЗ рдзреБрдПрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХреИрдирд░реА рдкрдХреНрд╖рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦрдирд┐рдХреЛрдВ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ ... Next.js рдХрд╛ рдХреИрдирд░реА рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдХреЗрдЪ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

рдпрд╣ рдлрд┐рдХреНрд╕ Next.js 9.5.0 рдФрд░ 9.5.1 рдХреЗ рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬ рдкрд░ рд╣реИ, рдпрд╛ рдирдпрд╛ (рдХреЗрд╡рд▓ рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ)!

рдЙрддреНрдкрд╛рджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдореИрдВ рдЕрднреА рднреА рд╕реНрдЯрд╛рдЗрд▓рдмреНрд▓рдХреЙрдорд░реНрд╕ + рдордЯреЗрд░рд┐рдпрд▓ рдпреВрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдлрдУрдпреВрд╕реА рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрд╛?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

YarivGilad picture YarivGilad  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

olifante picture olifante  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lixiaoyan picture lixiaoyan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

wagerfield picture wagerfield  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ