Next.js: рдиреНрдпреВрдирддрдо рдЕрдкреЛрд▓реЛ рдЙрджрд╛рд╣рд░рдг

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рджрд┐рд╕ре░ 2016  ┬╖  60рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vercel/next.js

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЕрдкреЛрд▓реЛ рдХреЗ рдмрдЬрд╛рдп рд╕реАрдзреЗ рдЕрдкреЛрд▓реЛ-рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдкреЛрд▓реЛ рдПрдХреАрдХрд░рдг рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ: https://github.com/nmaro/apolo-next-example
рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рдЪрд╛рд▓реВ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдЬрдм рддрдХ рдореИрдВ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рд╕рд░реНрд╡рд░ рдХреЛ рдСрдирд▓рд╛рдЗрди рд░рдЦрддрд╛ рд╣реВрдБ): https://apollo-next-example-oslkzaynhp.now.sh

рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдБ рд╣реИрдВ:

рдЕрдкреЛрд▓реЛ.рдЬреЗрдПрд╕

import ApolloClient, {createNetworkInterface} from 'apollo-client'

export default new ApolloClient({
  networkInterface: createNetworkInterface({
    uri: GRAPHQL_URL
  })
})

рдлрд┐рд░ рдПрдХ рдкреЗрдЬ рдореЗрдВ

import React from 'react'
import gql from 'graphql-tag'
import 'isomorphic-fetch'
import apollo from '../apollo'
import Link from 'next/link'

const query = gql`query {
  posts {
    _id
    title
  }
}`
export default class extends React.Component {
  static async getInitialProps({req}) {
    return await apollo.query({
      query,
    })
  }
  render() {
    ...
  }
}

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

рд╣рдореЗрдВ Apollo рдмреНрд▓реЙрдЧ рдкрд░ Apollo + Next.js рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП!

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

рдХреБрдЫ рдЕрд╡рд▓реЛрдХрди: рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рднреА рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХреЛрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рддрдХ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ (рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рдЖрдк рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЕрдкреЛрд▓реЛ рдХреЗ рд╕рд╛рде рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ next.js рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ: рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдШрдЯрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВ - рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рджреЛрдиреЛрдВ рдкрд░ рд╣реЛред рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдмрд┐рдВрджреБ рд╣реИ: рд░реВрдЯ рдШрдЯрдХ рдореЗрдВ getInitialProps рдореЗрдВред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдореЗрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛

  1. рд╣рдорд╛рд░реЗ рдРрдкреНрд╕ рдХреЛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╣рдо рд╢реБрд░реВ рд╕реЗ рд╣реА рдПрдХ рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░ рд╕рдХреЗрдВ, рдпрд╛
  2. рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ (рдЕрд░реНрдерд╛рддреН рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬреЛ рд╣рдо getInitialProps рдореЗрдВ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ), рдПрдХ рдЕрд▓рдЧ рд░рдгрдиреАрддрд┐ рдХреЗ рд╕рд╛рде

рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, getInitialProps рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдФрд░ рдЕрдЧрд░ рдХреБрдЫ рдХреЛрд░ рдбреЗрд╡рд▓рдкрд░ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред

getInitialProps рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрд╡рд▓ рд░реВрдЯ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, https://github.com/zeit/next.js/issues/192 рджреЗрдЦреЗрдВред рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╡рд╣рд╛рдВ рд░рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред

@sedubois рдЖрдк react-apollo рдХреЗ рд╕рд╛рде рдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рдереЗ?

@nmaro рдЖрдкрдХрд╛ https://github.com/nmaro/apolo-next-example рдЦрд╛рд▓реА рд╣реИред

@amccloud рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @nmaro рд╕реЗ рдкреВрдЫрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ (рдореБрдЭреЗ рдЕрднреА рднреА рдХреЛрдб рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред

рдзрдиреНрдпрд╡рд╛рдж @sedubois рдпрд╣ рдЕрдм рдСрдирд▓рд╛рдЗрди рд╣реИ (рдкрд╣рд▓реА рдмрд╛рд░ рдХреЗрд╡рд▓ push рдХреЗ рдмрдЬрд╛рдп рд╣рдореЗрд╢рд╛ push origin master рдЪрд▓рд╛рдирд╛ рднреВрд▓ рдЬрд╛рдПрдВ)ред

рдУрд╣, рдореИрдВрдиреЗ рдЧрд▓рдд рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред @nmaro рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЕрдкреЛрд▓реЛ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдереА?

рд╕рд░реНрд╡рд░ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рдЬреИрд╕реЗ рд╣реА рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗ рд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдкреЗрдЬ рдлрд┐рд░ рд╕реЗ рдЦрд╛рд▓реА рд╣реЛ рдЧрдпрд╛ред рдореИрдВрдиреЗ рддрдм @sedubois рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (https://github.com/RelateMind/relate) рдХреЛ рджреЗрдЦрд╛, рдФрд░ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рддреНрд╡рд░рд┐рдд рд╕рдмреВрдд-рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред

@stubailo рдЪреВрдВрдХрд┐ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рдереЗ рдХрд┐ рдЕрдкреЛрд▓реЛ рдХреЛ next.js рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдЗрддрдирд╛ рдХрдард┐рди рдХреНрдпреЛрдВ рд╣реИ - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдкреЗрдЬ рдХреЗ рд░реВрдЯ рдШрдЯрдХ рдкрд░ рдПрдХ async рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╣реИ рдЬрд┐рд╕реЗ getInitialProps рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЕрдкреЛрд▓реЛ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рдХреЗрд╡рд▓ рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рджрд┐рд▓рдЪрд╕реНрдк - рдХреНрдпрд╛ Next.js рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдПрдХреАрдХрд░рдг рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рдмрд╣реБрдд рдХрдард┐рди рд╣реИред

рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рдбреЗрдЯрд╛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рдХреИрд╢ (Redux, Apollo, Relay) рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Next рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╣рдо рдЧреНрд▓реЛрдмрд▓ рдХреИрд╢ (Redux, Apollo, Relay) рдХреЗ рд╕рд╛рде рдЖрдзреБрдирд┐рдХ рдбреЗрдЯрд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдиреЗрдХреНрд╕реНрдЯ.js рдХреЛ рдХреИрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрдбрд╝реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред @stubailo @rauchg

рдмрд┐рд▓реНрдХреБрд▓ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рдХреА рдкрд░ рдПрдХ Redux рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд╣рдореЗрдВ рдЙрди рдЬреИрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :)

рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд░рд┐рд▓реАрдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдХрд░рдирд╛ рд╣реИред рд╣рдо рдХрд┐рд╕реА рднреА рд╕рдордп рд╡рд┐рдХрд┐ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ @nmaro рд╡рд╣ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдл рджрд┐рдЦрддрд╛ рд╣реИ, рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рдо рдЗрд╕реЗ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдУрд╣, рдЕрдЬреАрдм - рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдореБрджреНрджреЛрдВ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖред @nmaro рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЕрдкреЛрд▓реЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд▓рдЧрднрдЧ рд░реЗрдбрдХреНрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди new ApolloClient рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдпрд╣ createStore рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ ApolloProvider рдХреЗ рдмрдЬрд╛рдп Provider рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдореБрдЭреЗ рдПрдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред рд░рд┐рдПрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣рдорд╛рд░рд╛ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рдЙрджрд╛рд╣рд░рдг рд╣реИ, Next.js рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЛрд░реНрдЯ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛: https://github.com/apolostack/frontpage-react-app

@stubailo рдореБрдЭреЗ рдЖрдкрдХреЗ рд╕рд╛рде рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред рдореИрдВ рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЕрдкреЛрд▓реЛ рдорд╛рдЗрдХреНрд░реЛрдлреНрд░реЗрдорд╡рд░реНрдХ, рд╢рдирд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрдВрддрддрдГ рдЙрдиреНрд╣реЗрдВ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ + рдЕрдкреЛрд▓реЛ рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ :)

рдЕрдЪреНрдЫрд╛ - рд╣рд╛рдБ, рдХреНрд░рд┐рдПрдЯ-рд░рд┐рдПрдХреНрд╢рди-рдРрдк рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдЕрдЧрд▓реЗ.рдЬреЗрдПрд╕ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд░рдВрдЯрдкреЗрдЬ рдРрдк рдореЗрдВ рдиреНрдпреВрдирддрдо рд╕рдВрд╢реЛрдзрди рдХрд░рдирд╛ рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрдЧреАред рддреЛ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рд╣реЛрдо рдкреЗрдЬ рдкрд░ рднреА рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

@stubailo

рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдореБрджреНрджрд╛ рдпрд╣ рдерд╛ рдХрд┐ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдерд╛ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдкреЛрд▓реЛ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╕реАрдзреЗ рдЕрдкреЛрд▓реЛ-рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реБрдИред

рд╕рд░реНрд╡рд░-рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдореБрд╢реНрдХрд┐рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкреНрд░рд╢реНрди рд╣реИрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрд░реНрдерд╛рдд рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ ssr рдврд╛рдВрдЪреЗ рдХреЛ рдпрд╛ рддреЛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛

  1. рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдПрдХ рдмрд╛рд░ рдЗрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреВрд░реЗ рдШрдЯрдХ рдкреЗрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЛ рдмрд╛рд░ рдЬрд╛рдПрдВред
  2. рд░реВрдЯ рдореЗрдВ рдПрдХ рдПрд╕рд┐рдВрдХреНрд╕ рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ - рдпрд╣ getInitialProps рдХреЗ рд╕рд╛рде next.js рдЕрдкреНрд░реЛрдЪ рд╣реИ

рдЕрдм рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдкреЛрд▓реЛ рдХреЗ рдкрд╛рд╕ рдЙрди рд╕рднреА рдбреЗрдЯрд╛ рдХреЙрд▓реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдПрдХ рдШрдЯрдХ рдкреЗрдбрд╝ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдВрдЧреЗ, рдФрд░ рдпрд╣ рд╕рдм рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдХрд░реЗрдВ рдЬреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХрдкреНрд░реЙрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@stubailo рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ? ^

@nmaro @ads1018 рдХреНрдпрд╛ рдЖрдкрдиреЗ getDataFromTree рджреЗрдЦрд╛ рд╣реИ? рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/RelateMind/relate/blob/master/hocs/apolo.js

BTW рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдм рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ https://github.com/zeit/next.js/pull/301 рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЕрднреА рддрдХ рдЙрд╕ рдкрд░ рдЧреМрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

@sedubois рдореИрдВрдиреЗ рдЬрд╛рдБрдЪ рдХреА рдХрд┐ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЕрдкреЛрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдирдП рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдПрдкреАрдЖрдИ (# 301) рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрднреА рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдЖрдкрдХреЛ рд╕рднреА рдкреЗрдЬ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдПрдЪрдУрд╕реА рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдирд╛ рди рдкрдбрд╝реЗред рдпрджрд┐ рдЖрдк рдЙрд╕ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ! рдЕрдкреЛрд▓реЛ рд╣реЛрдордкреЗрдЬ рдкрд░ рдЕрдЧрд▓рд╛.рдЬреЗрдПрд╕ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ :)

NB @ads1018 https://github.com/zeit/next.js/pull/301 , CommonsChunkPlugin рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ API рдирд╣реАрдВред рд▓реЗрдХрд┐рди рд╣рд╛рдВ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдПрдкреАрдЖрдИ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рднреА рдорджрдж рдХрд░реЗрдЧрд╛, рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рд░рд┐рдПрдХреНрдЯ-рдЕрдкреЛрд▓реЛ 2.0.0-рдмреАрдЯрд╛.2 рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕реМрднрд╛рдЧреНрдп рдорд┐рд▓рд╛ рд╣реИ?

@sedubois @stubailo рдпрджрд┐ рдЖрдк рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореИрдВрдиреЗ рдЕрдЧрд▓реЗ + рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЕрдкреЛрд▓реЛ рдкрд░ рдЕрдкрдирд╛ рдкреНрд░рдпрд╛рд╕ рдмрдврд╝рд╛рдпрд╛ред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/ads1018/frontpage-next-app

рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЕрднреА рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдШрдЯрдХреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдирд╣реАрдВред рд╢рд╛рдпрдж рд╣рдо рд╕рд░реНрд╡рд░.рдЬреЗрдПрд╕ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЕрдкреЛрд▓реЛ рдХреА getDataFromTree рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╛ рд╢рд╛рдпрдж рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо <document> рдХреЗ рдЕрдВрджрд░? рдХрд┐рд╕реА рднреА рд╕реБрдЭрд╛рд╡/рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдЕрдВрддрддрдГ рдЗрд╕ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЕрдЧрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдЕрдкреЛрд▓реЛ рд╣реЛрдо рдкреЗрдЬ рдХреЗ рдЕрдВрджрд░ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред

рд╕рд░реНрд╡рд░-рд░реЗрдВрдбрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдкреВрд░реНрд╡-рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ getInitialProps рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдУрд╡рд░рд░рд╛рдЗрдб рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЧреЛрдЪрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЕрдкреЛрд▓реЛ рдХреЗ рд╕рд╛рде рдпрд╣ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ @nmaro рдиреЗ рдмрддрд╛рдпрд╛:

рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдкреЛрд▓реЛ рдХреЗ рдкрд╛рд╕ рдЙрди рд╕рднреА рдбреЗрдЯрд╛ рдХреЙрд▓реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдПрдХ рдШрдЯрдХ рдкреЗрдбрд╝ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдВрдЧреЗ, рдФрд░ рдпрд╣ рд╕рдм рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдХрд░реЗрдВ рдЬреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХрдкреНрд░реЙрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкрдХрдбрд╝ рд▓рд┐рдпрд╛

@ ads1018 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдордЬрд╛рдХ рдХрд░рдиреЗ рд╕реЗ, рдпрджрд┐ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рдШрдЯрдХ рдХреЛ getInitialProps рдкрд░ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЗрд╕реЗ рдЕрдкреЛрд▓реЛ рд╣реЗрд▓реНрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред

_рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рддрдм рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛:

export default class MyDocument extends Document {
  static async getInitialProps ({ app }) {
    const wrapped = React.createElement(ApolloProvider, { client }, app)
    const rendered = await renderToStringWithData(wrapped)
    return { html: rendered, initialState: client.store.getState() }
  }

  render () {

    return (
      <html>
        <Head>
          <title>My page</title>
        </Head>
        <body>
          <ApolloProvider client={client}>
            <Main />
          </ApolloProvider>
          <NextScript />
        </body>
      </html>
    )
  }
}

@rauchg app рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд renderPage рдХреЛ рдмреЗрдирдХрд╛рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ?

@ bs1180 рдЖрд╣ рд╢рд╛рдирджрд╛рд░ред рдореИрдВ рд╡рд╣реА рдвреВрдВрдв рд░рд╣рд╛ рдерд╛ред рдЙрдореНрдореАрдж рд╣реИ, app рдХреЛ рдмреЗрдирдХрд╛рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЖрд╕рд╛рди рдмрджрд▓рд╛рд╡ рд╣реИред рдпрд╣ рддреБрд░рдВрдд рдиреЗрдХреНрд╕реНрдЯ рдХреЛ рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ-рдлреНрд░реЗрдВрдбрд▓реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдирд╛ рджреЗрдЧрд╛ред

@ bs1180 рдореИрдВрдиреЗ app рдХреЛ renderPage рд░рд┐рдЯрд░реНрди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреА рд╕реЛрдЪ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ?

@ ads1018 рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ - рдЖрдкрдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ render рдЕрднреА рднреА рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рджреЛрд╣рд░рд╛рд╡ рд╣реЛрдЧрд╛ рдпрджрд┐ renderToStringWithData рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдХреБрдЫ рдФрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореЗрд░рд╛ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рд▓рдЧрднрдЧ рдЙрддрдирд╛ рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдХрд▓реНрдкрдирд╛ рдХреА рдереА, рдореБрдЦреНрдпрддрдГ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЦреНрдп рдРрдк <Main /> рдШрдЯрдХ (__next div рдореЗрдВ) рдХреЗ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдХрд┐рд╕реА рднреА рд╕рдВрджрд░реНрдн рдХреЛ рдКрдкрд░ рд╕реЗ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рджреВрд░ рдХрд░реЗрдВред рддреЛ рдЕрдкреЛрд▓реЛ рд╕рдВрджрд░реНрдн рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрднреА рднреА рдПрдХ рдПрдЪрдУрд╕реА рдХреА рдЬрд░реВрд░рдд рд╣реИред

@ bs1180 рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБред рдХреНрдпрд╛ <Main /> рдХреЛ ApolloProvider рдХреЗ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рд╕рдВрджрд░реНрдн рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХреЗрдВ?

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд▓рдд рджрд┐рд╢рд╛ рд╣реИред рдкрд░рдлреЗрдХреНрдЯ рдПрд╕рдПрд╕рдЖрд░ рд╕рд┐рд░реНрдл рдПрдХ рдПрдЪрдУрд╕реА рдХреЗ рд╕рд╛рде рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ- рдпрд╣рд╛рдВ рдореЗрд░рд╛ рдХреЛрдмрд▓реНрдб-рдЯреБрдЧреЗрджрд░ рд╡рд░реНрдЬрди рдПрдХ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ:

export default (options = {}) => Component => class ApolloHOC extends React.Component {
  static async getInitialProps (ctx) {
    const user = process.browser ? getUserFromLocalStorage() : getUserFromCookie(ctx.req)
    const jwt = process.browser ? null : getJwtFromCookie(ctx.req)

    if (options.secure && !user) {
      return null // skip graphql queries completely if auth will fail
    }

    const client = initClient(jwt)
    const store = initStore(client)

   // This inserts the context so our queries will work properly during the getDataFromTree call,
   //  as well as ensuring that any components which are expecting the url work properly 
    const app = React.createElement(ApolloProvider, { client, store },
      React.createElement(Component, { url: { query: ctx.query }}))

 // this is the most important bit :)
    await getDataFromTree(app)

    const initialState = {[client.reduxRootKey]: {
      data: client.store.getState()[client.reduxRootKey].data
    }}

    return { initialState, user }
  }

  constructor (props) {
    super(props)
    this.client = initClient()
    this.store = initStore(this.client, this.props.initialState)
  }

  render () {
    return (
      <ApolloProvider client={this.client} store={this.store}>
          <Component url={this.props.url} />
      </ApolloProvider>
    ) 
  }
}

initClient рдФрд░ initStore рд░реЗрдбрдХреНрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рддрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

import ApolloHOC from '../hoc'
import { graphql } from 'react-apollo'

export default ApolloHOC({ secure: false })(() => <b>Hello world</b>)

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ - рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рд░рд╛рд╕реНрддреЗ рд╣реИрдВ, рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред

@ bs1180 рдХреВрд▓, рдпрд╣ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдзрдиреНрдпрд╡рд╛рдж рд╣реИред

рдХреНрдпрд╛ _document.js рдХреЗ рдЕрдВрджрд░ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреБрдЫ рдФрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЙрд╕ рдПрдЪрдУрд╕реА рдХреЛ рдПрдХ рд╕рд╛рде рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХреЗрдВ рдЬреИрд╕реЗ рдЖрдкрдиреЗ рд╢реБрд░реВ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред

рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ - рдЬреЛ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░ рд╕рдВрджрд░реНрдн рдкрд░ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ (рдЪрд╛рд╣реЗ рд╡рд╣ рдЕрдкреЛрд▓реЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реЛ, рдорд╛рдирдХ рд░реЗрдбрдХреНрд╕ рд╕реНрдЯреЛрд░, рдереАрдо рдЗрддреНрдпрд╛рджрд┐) рдХрд╕реНрдЯрдо _document.js рд╕реЗред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдЕрдкреЛрд▓реЛ рдПрд╕рдПрд╕рдЖрд░ рддрд░реНрдХ рдХреЛ рд╡рд╣рд╛рдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдЪрдУрд╕реА/рдЖрд╡рд░рдг рдШрдЯрдХ рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдВрдЧреЗред
рдЕрдЧрд▓реЗ.рдЬреЗрдПрд╕ рдЗрдВрдЯрд░реНрдирд▓ рдХреЗ рдмреЗрд╣рддрд░ рдЬреНрдЮрд╛рди рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкрд╛рд╕ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдареАрдХ рд╣реИ рдЕрдЧрд░ рдЖрдк рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдбрд╝ рд░рд╣рд╛ рд╣реВрдВред

рдореБрдЭреЗ рд░рд┐рдПрдХреНрдЯ рдЕрдкреЛрд▓реЛ рдФрд░ рдиреЗрдХреНрд╕реНрдЯ рдХрд╛ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рд╛ рд╣реИ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧреА рдкрд╛рдПрдВрдЧреЗред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/ads1018/next-apolo-example (рдореИрдВрдиреЗ рдЕрднреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдбреЗрдореЛ рднреА рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИред)

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

рдореБрдЭреЗ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @ bs1180 рдФрд░ @rauchg ред рдпрджрд┐ рдЖрдк рд░реЗрдкреЛ рдореЗрдВ with-apollo рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдФрд░ рдореИрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рдзрдиреНрдпрд╡рд╛рдж @ ads1018 ЁЯШК рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг https://Relate.now.sh рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдХреНрдпрд╛ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЕрдкреЛрд▓реЛ рдХреЛ рдЧрд╣рд░реЗ рдиреЗрд╕реНрдЯреЗрдб рдШрдЯрдХреЛрдВ (getInitialProps рдХреЗ рдХреИрд╕реНрдХреЗрдб рд╕реЗ рдмрдЪрдиреЗ) рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рдпрд╣ рдореБрдЦреНрдп рджрд░реНрдж рдмрд┐рдВрджреБ рд╣реИред рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред

@sedubois рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ # 192 рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВред рдореИрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдиреЗрд╕реНрдЯреЗрдб рдШрдЯрдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рдЕрдкреЛрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдк рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛рдПрдВрдЧреЗ?

рдзрдиреНрдпрд╡рд╛рдж @ads1018 , https://github.com/ads1018/next-apollo-example/issues/2 рдореЗрдВ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪреАрдЬреЗрдВ рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЙрджрд╛рд╣рд░рдг рднреА рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛: https://github.com/RelateNow/relate

рдЕрдЪреНрдЫрд╛ рдХрд╛рдо, @ads1018 @sedubois! рдореИрдВ рдЗрд╕ рдкрд░ рдФрд░ # 192 рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдЕрдкреЛрд▓реЛ рдФрд░ рд╡реЗрдирд┐рд▓рд╛ рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реАрдлрд╝реЗрдЪрд┐рдВрдЧ/рдПрд╕рд┐рдВрдХ рджреГрд╢реНрдпреЛрдВ рдХреА рднреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдпрд╛ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ getDataFromTree рдЪрд▓рд╛рдиреЗ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ? рдЪреВрдВрдХрд┐ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рд╡рд╣ рд╡рд┐рдзрд┐ рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЬрдм getInitialProps рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИ, рддреЛ рд░рд┐рдПрдХреНрдЯ рдкреЗрдбрд╝ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ (рдпрджреНрдпрдкрд┐ рдХреИрд╢ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде)ред

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

рдЕрд░реЗ @estrattonbailey - рдореИрдВрдиреЗ рдХреЛрдИ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджреЗрдЦреА рд╣реИ рдФрд░ рдореБрдЭреЗ рдХреЛрдИ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ! getDataFromTree рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЛ рдПрдХ рд╕рд╢рд░реНрдд рдХреЗ рдЕрдВрджрд░ рд▓рдкреЗрдЯ рд▓рд┐рдпрд╛ рд╣реИ рдЬреЛ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХреЗрд╡рд▓ рддрднреА рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реА рдмрд╛рд░ рдРрдк рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдж рдХреЗ рд╕рднреА рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ . рдпрджрд┐ рдЖрдк рдкреНрд░рджрд░реНрд╢рди рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдбреЗрдореЛ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ!

@ ads1018 рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрд╛рдп:

  • рдЗрд╕ рддрд░рд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдВ
  • рдЗрд╕ рддрд░рд╣ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЕрд▓рдЧ рдорд┐рдбрд▓рд╡реЗрдпрд░, рд╕реНрдЯреЛрд░ рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░
  • isServer рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдВ typeof window !== 'undefined' , рдбреНрд░реЙрдк !!ctx.req
  • рдЙрд╕ IS_SERVER const рдХреЛ lib рдореЗрдВ рдирд┐рдХрд╛рд▓реЗрдВ, рдЗрд╕реЗ рдкрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

@ads1018 рд╕реБрдирдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛! рдЕрдЪреНрдЫрд╛ рд╕рд╛ рдбреЗрдореЛред

рдореЗрд░реЗ рдХрд╣рдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ: рдпрд╣ рдкреИрдорд╛рдирд╛ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛? рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдиреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдиреЗрдХреНрд╕реНрдЯ рдкреНрд░рддреНрдпреЗрдХ рд░реВрдЯ рдЯреНрд░рд╛рдВрдЬрд┐рд╢рди рдкрд░ getInitialProps рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдкреЗрдЬ рдШрдЯрдХ рдпрд╛рдиреА pages/page.js рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдПрдХ рдкреВрд░реНрдг рдкреИрдорд╛рдиреЗ рдкрд░ рдРрдк/рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╕реИрдХрдбрд╝реЛрдВ рдиреЛрдбреНрд╕ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреЗрдЯрд╛ рдЖ рд░рд╣реЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рд░реНрдЧ рдкрд░ рджреЛ рдмрд╛рд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреБрдЫ рд╡рд┐рд▓рдВрдмрддрд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдЬрд┐рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдПрдХ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╕рдВрдкрд╛рджрдХреАрдп рд╕рд╛рдЗрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЖрдкрдХреЗ рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рдХреБрдЫ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@estrattonbailey Gotchaред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкреИрдорд╛рдирд╛ рд╣реЛрдЧрд╛ред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреГрд╖реНрда рд▓реЛрдб рдХреЗ рд▓рд┐рдП, getInitialProps рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛ред рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ getInitialProps рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рд▓реЗрдХрд┐рди рдХреЛрдИ рдбреЗрдЯрд╛ рджреЛ рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ getDataFromTree рдПрдХ рд╕рд╢рд░реНрдд рдХреЗ рдЕрдВрджрд░ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

рд╕рд╛рдЗрдб рдиреЛрдЯ - рдпрджрд┐ рдЖрдк рдкреГрд╖реНрда рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдШрдЯрдХреЛрдВ рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдХрд╛рд░рдг рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреГрд╖реНрда рд▓реЛрдб рд╕рдордп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдкреЛрд▓реЛ рдХреЛ рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рджреМрд░рд╛рди рдЬрд╛рдирдмреВрдЭрдХрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдФрд░ ssr: false рдкрд╛рд╕ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдСрдлрд╝рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкреЛрд▓реЛ рдХреНрд╡реЗрд░реА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ

рдпрджрд┐ рдЖрдк рдЖрдЧреЗ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдЬреБрдбрд╝реВрдВрдЧрд╛ :)

рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ getInitialProps рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рд▓реЗрдХрд┐рди рдХреЛрдИ рдбреЗрдЯрд╛ рджреЛ рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ getDataFromTree рдПрдХ рд╕рд╢рд░реНрдд рдХреЗ рдЕрдВрджрд░ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ getInitialProps рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рддрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм <Link> рдХреЗ рд╕рд╛рде рдЯреНрд░рд╛рдВрдЬрд┐рд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рд╢реБрд░реБрдЖрддреА рд▓реЛрдб рдХреЗ рдмрд╛рдж

@ ads1018 @estrattonbailey AFAIK рдкрд╣рд▓реЗ рдкреЗрдЬ рд▓реЛрдб рдкрд░ рдЕрднреА рднреА 2 рд░реЗрдВрдбрд░ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╣реИрдВ: getDataFromTree рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ HTML рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдВрдбрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдордд рд╕реЛрдЪреЛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ SSR рджреНрд╡рд╛рд░рд╛ рдЯрд╛рд▓реЗ рдЧрдП рдиреЗрдЯрд╡рд░реНрдХ рд░рд╛рдЙрдВрдб-рдЯреНрд░рд┐рдк рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдХрд╛рдлреА рдкреНрд░рджрд░реНрд╢рди рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдЕрдзрд┐рдХрддрдо рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЧреНрд░рд╛рдлрд╝рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ рдХреЛ рдЙрд╕реА рдорд╢реАрди рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рд╕рд░реНрд╡рд░, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдкреНрд░рджрд░реНрд╢рди рд╕реЗ рдЪрд┐рдВрддрд┐рдд рд╣реЛрдВрдЧреЗ (рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВ рдЕрдкрдиреЗ рдРрдк рдХреЛ рдЧреНрд░рд╛рдлрдХреВрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реВрдВ рдмреИрдХрдПрдВрдб, рдЬрдмрдХрд┐ Next.js Now/Zeit World рдХреЗ рд╕рд╛рде рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рд╣реИ)ред

@sedubois @estrattonbailey рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЛ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред getDataFromTree рдкреЗрдбрд╝ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╡рд╛рджрд╛ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдЕрдкреЛрд▓реЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдЯреЛрд░ рдореЗрдВ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдкрд░ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЬрдм рд╡рд╛рджрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдорд╛рд░рд╛ рдЕрдкреЛрд▓реЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдЯреЛрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╣рдо рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдкреЗрдбрд╝ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдо HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдХрдбрд╝реЗ рдкрд░рд┐рдгрд╛рдо рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╣рдо рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

getDataFromTree рдкреЗрдбрд╝ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

@ ads1018 AFAIK рдФрд░ рдЕрдкреЛрд▓реЛ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ _does_ рдкреЗрдбрд╝ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ (рдХреЗрд╡рд▓ рдЕрдкреЛрд▓реЛ рдбреЗрдЯрд╛-рдлрд╝реЗрдЪрд┐рдВрдЧ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред рддреЛ рдпрд╣ 2 рдкрд╣рд▓реЗ рдкреЗрдЬ рд▓реЛрдб рдкрд░ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА, рдЖрдкрдХреЗ рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкреЛрд▓реЛ рдФрд░ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рдмреАрдЪ рдПрдХ рдкреНрд░рдпреЛрдЧ рдпреЛрдЧреНрдп рдПрдХреАрдХрд░рдг рд╣реИ, рдФрд░ рдЕрдкреЛрд▓реЛ рдПрд╕рдПрд╕рдЖрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢реЗрд╖ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЕрдм рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рд╡рд╣рд╛рдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред

@sedubois рд╡реИрд╕реЗ рднреА рд░реЗрдВрдбрд░ рдХреНрдпрд╛ рд╣реИ? рдореИрдВ рдЗрд╕реЗ рдЪрд▓рдирд╛ рдФрд░ рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдирд╛ рдХрд╣реВрдВрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - setState рдХреЛ рджрдмрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдбреЛрдо рдореЗрдВ рдХреЛрдИ рд╕рд╛рдордВрдЬрд╕реНрдп рдирд╣реАрдВ рд╣реИред

@ ads1018 рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг! рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдпрд╣рд╛рдВ рднреА рд╡рд┐рдХреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

cc @rauchg

рд╣рдореЗрдВ Apollo рдмреНрд▓реЙрдЧ рдкрд░ Apollo + Next.js рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП!

@stubailo @ads1018 рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рд╕рдорд╛рди рдЕрдкреЛрд▓реЛ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдмрдбрд╝рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдРрдк рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/relatenow/relate

рдзрдиреНрдпрд╡рд╛рдж @рд╣реЗрд▓рдлрд░ред рдореИрдВ рд░реЛрдорд╛рдВрдЪрд┐рдд рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдирд┐рдХрд▓рд╛ред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ + рдЕрдкреЛрд▓реЛ рдХреЗ рд╕рд╛рде рдРрдк рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреА рдкрд╡рд┐рддреНрд░ рдХрдмреНрд░ рдХреА рдЦреЛрдЬ рдХреА рд╣реИред рдореИрдВ рд╕реБрд╕рдорд╛рдЪрд╛рд░ рдлреИрд▓рд╛рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдПрдХ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд░рдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛ рд╣реВрдВред @stubailo рдореБрдЭреЗ рдЕрдкреЛрд▓реЛ рдорд╛рдзреНрдпрдо рдкреНрд░рдХрд╛рд╢рди рдкрд░ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдкрд░ рд╕рд╣рдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА :)

рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЙрд╕рдХреА рдкреНрдпрд╛рд░реА рдРрдк рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @sedubois рдХреЛ рдмрд╣реБрдд рдЪрд┐рд▓реНрд▓рд╛рдУред рдореИрдВ

@ads1018 рдЖрдкрдХреЛ рдмреНрд▓реЙрдЧ рдкрд░ рд▓рд╛рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдВ, рддреЛ рдореБрдЭреЗ (рдерд┐рдпрд╛) рдЕрдкреЛрд▓реЛ рд╕реНрд▓реИрдХ рдкрд░ рдкрд┐рдВрдЧ рдХрд░реЗрдВред :)

@helfer рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реИрдВред рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдореБрджреНрджреЛрдВ рдХреЛ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

@stubailo @theadactyl рднрдпрд╛рдирдХ рд╡рд┐рдЪрд╛рд░ тЭдя╕П

рдХрд┐рд╕реА рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛/рдкреАрдЖрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ - рдбреЗрдЯрд╛ рдХреЛ рджреЛ рдмрд╛рд░ рд╕рд░реНрд╡рд░ рдкрдХреНрд╖ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ? рдмрд╕ рдЙрддреНрд╕реБрдХ

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

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

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

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

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

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

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