Razzle: рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдареАрдХ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЕрдХреНрддреВре░ 2018  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jaredpalmer/razzle

рд▓рд╡рд┐рдВрдЧ рд░реИрдЬрд╝рд▓, рдЗрддрдирд╛ рдмрдврд╝рд┐рдпрд╛ рдЯреВрд▓ред

рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рд╕рд╛рдордЧреНрд░реА рдпреВрдЖрдИ рд╕реЗрдЯрдЕрдк рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ _fantastically_ рдПрдХ рдЪреАрдЬ рдХреЛ рдЫреЛрдбрд╝рдХрд░: рдПрдХ рдЙрдк рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдиреЗ рдФрд░ рдкреГрд╖реНрда рдХреЛ рд░реАрдлреНрд░реЗрд╢ рдХрд░рдиреЗ рдкрд░ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдиреНрдпреВрдирддрдо рд╢реИрд▓рд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдкреГрд╖реНрда рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЖрдХрд░реНрд╖рдХ рдмрдЧ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рдЫрд▓реЗ yarn start рд╕реЗ рдХреМрди рд╕рд╛ рдкреГрд╖реНрда рдЦреБрд▓рд╛ рдерд╛, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд░реАрдлреНрд░реЗрд╢ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕ рдкреГрд╖реНрда рдХреЛ рдареАрдХ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдореИрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд░реАрдлреНрд░реЗрд╢ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рд░реВрдЯ рдкрде рдкрд░ рднреА)ред

  1. рд╕рд░реНрд╡рд░ рдХреЛ yarn start рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ
  2. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП http://localhost:3000/blog-posts
  3. рдкреГрд╖реНрда рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВ (рд╕рдм рдХреБрдЫ рдмрдХрд╡рд╛рд╕ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ)
  4. рд╕рд░реНрд╡рд░ рдХреЛ рдорд╛рд░реЗрдВ (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдХреЛ рдЦреБрд▓рд╛ рд░рдЦреЗрдВ)
  5. рд╕рд░реНрд╡рд░ рдХреЛ yarn start рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ
  6. рдкреГрд╖реНрда рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВ рдФрд░ рдпрд╣ рд╕реБрдВрджрд░ рджрд┐рдЦрддрд╛ рд╣реИ (рд╕рдм рдХреБрдЫ рдареАрдХ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛)
  7. _any_ рджреВрд╕рд░реЗ рдкреЗрдЬ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВ
  8. рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВ, рдмрдХрд╡рд╛рд╕ рд▓рдЧ рд░рд╣рд╛ рд╣реИ... рдФрд░ рджреЛрд╣рд░рд╛рдПрдВред

рдореИрдВрдиреЗ yarn build && yarn start:prod рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдиреНрдпреВрдирддрдо рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдореИрдВ рдПрдХ рд▓рд┐рдВрдХ рдвреВрдВрдврддрд╛ рд╣реВрдВ рдФрд░ рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдкреВрд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд┐рд░ рд╕реЗ рд╕реБрдВрджрд░ рджрд┐рдЦрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдпрд╛ рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рдХреБрдЫ рд╕рдВрдпреЛрдЬрди рдФрд░ @material-ui/core/styles/withStyles рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдореЗрдВ рд╕реЗ рдХреЛрдИ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдмрд╛рдж рдХреЗ рдкреЗрдЬ рд▓реЛрдб рдкрд░ рдХрдХреНрд╖рд╛рдПрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ ( рдПрдЪрдЯреАрдПрдордПрд▓ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ ) рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЖрдЗрд╕реЛрдореЛрд░реНрдлрд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ/рд╡рд░реНрдЧреЛрдВ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд▓реЛрдбрд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░реНрдЪрд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ:

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рддреА рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рд╕рдордп рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрди рдЪрд░реНрдЪрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд░реАрдм рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкреНрд░рдХрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡рд┐рдЪрд╛рд░?

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

рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢реЛрдз рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рдВрдмреЗ рдердХрд╛рдК рдШрдВрдЯреЛрдВ рдХреЗ рдмрд╛рдж рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рдВрддреБрд╖реНрдЯрд┐рджрд╛рдпрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рдХреНрд╕ рдореВрд▓ рд░реВрдк рд╕реЗ after.js, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЬреЗрдПрд╕рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ Document рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдиреАрдЪреЗ рдХреА рд░реЗрдЦрд╛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (рдореБрдИрдереАрдордкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдХреЗрд╡рд▓ рдПрдордпреВрдЖрдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ):

  static async getInitialProps({ assets, data, renderPage }) {
    const generateClassName = createGenerateClassName()
    const jss = create(jssPreset())

    const page = await renderPage(App => props => (
      <JssProvider jss={jss} generateClassName={generateClassName}>
        <MuiThemeProvider sheetsManager={new Map()}>
          <App {...props} />
        </MuiThemeProvider>
      </JssProvider>
    ))

    return { assets, data, ...page }
  }

рдЖрдк рд╕рднреА рдЗрд╕ рджрд░реНрдж рд╕реЗ рдмрдЪреЗрдВред :рдкреА

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

рд╣рд╛рд╣рд╛рд╣рд╛ рдореБрдЭреЗ рд░реИрдЬрд╝рд▓ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА UI рдХреЗ рд╕рд╛рде рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереА

@CharlyJazz рдпрд╣ рдмрд╣реБрдд (рдПрди | рдбреАрдЖрдИрдПрд╕) рд╕рд╛рд╣рд╕реА рд╣реИред рд╣рд╛рд╣рд╛ рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЙрдирдХреЗ withStyles рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдФрд░ рдЖрдЗрд╕реЛрдореЛрд░реНрдлрд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА?

рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢реЛрдз рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рдВрдмреЗ рдердХрд╛рдК рдШрдВрдЯреЛрдВ рдХреЗ рдмрд╛рдж рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рдВрддреБрд╖реНрдЯрд┐рджрд╛рдпрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рдХреНрд╕ рдореВрд▓ рд░реВрдк рд╕реЗ after.js, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЬреЗрдПрд╕рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ Document рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдиреАрдЪреЗ рдХреА рд░реЗрдЦрд╛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (рдореБрдИрдереАрдордкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдХреЗрд╡рд▓ рдПрдордпреВрдЖрдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ):

  static async getInitialProps({ assets, data, renderPage }) {
    const generateClassName = createGenerateClassName()
    const jss = create(jssPreset())

    const page = await renderPage(App => props => (
      <JssProvider jss={jss} generateClassName={generateClassName}>
        <MuiThemeProvider sheetsManager={new Map()}>
          <App {...props} />
        </MuiThemeProvider>
      </JssProvider>
    ))

    return { assets, data, ...page }
  }

рдЖрдк рд╕рднреА рдЗрд╕ рджрд░реНрдж рд╕реЗ рдмрдЪреЗрдВред :рдкреА

@jaredpalmer @jylinman рдХреНрдпрд╛ рд░реИрдЬрд╝рд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ?

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдореИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдПрд╕рдПрд╕рдЖрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ: https://material-ui.com/guides/server-rendering/

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