рдЕрдкреЛрд▓реЛ: 9 рдорд╣реАрдиреЗ - рд╕рд╛рдорд╛рдиреНрдп рдЙрдбрд╝рд╛рди

рдЫрд╡рд┐


рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, рдореЗрд░рд╛ рдирд╛рдо рд╢рд┐рдореЛрди рд▓реЗрд╡реЗрдиреНрд╕рди рд╣реИ, рдореИрдВ рд░рд╛рдордмрд▓рд░ рдЧреНрд░реБрдк рд╕реЗ рд╕реНрдЯреНрд░реАрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдПрдХ рдЯреАрдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЕрдкреЛрд▓реЛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред


рдореИрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдХрд┐ "рд╕реНрдЯреНрд░реАрдо" рдХреНрдпрд╛ рд╣реИред рдпрд╣ рдЙрджреНрдпрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реЗрд╡рд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рд╡реНрдпрд╡рд╕рд╛рдп рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдФрд░ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реЛрдиреЗ рдХреЗ рдмрд┐рдирд╛ рд╕рд░рд▓ рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдмрдирд╛ рджреЗрддреА рд╣реИред


рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реИрдВрдбрд┐рдВрдЧ рдкреГрд╖реНрда рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИред



рд╢реБрд░реБрдЖрдд рдХреНрдпрд╛ рдереА?


рдФрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ MVP, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЯреНрд╡рд┐рдЧ, jQuery рдФрд░ рдмрд╣реБрдд рддрдВрдЧ рд╕рдордп рд╕реАрдорд╛рдПрдВ рдереАрдВред рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рддрд░реАрдХреЗ рд╕реЗ рдЪрд▓реЗ рдЧрдП рдФрд░ рдПрдХ рдирдпрд╛ рд╕реНрд╡рд░реВрдк рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд░рд┐рдбрд┐рдЬрд╛рдЗрди "рдкреИрдЪреЗрдб рд╕реНрдЯрд╛рдЗрд▓" рдХреЗ рдЕрд░реНрде рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдордВрдЪ рдерд╛ рддрд╛рдХрд┐ рд╣рдо рд╕рд╣реА рджреГрд╢реНрдп рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХреЗрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо, рд╡рд┐рдХрд╛рд╕ рдЯреАрдо, рдХреЛ рдЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрддреНрдкрд╛рдж рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирдП рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред


рд╣рдорд╛рд░реЗ рд╡рд┐рднрд╛рдЧ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдЕрд░реНрдЬрд┐рдд рдХрд░ рд▓реА рд╣реИред рдореИрдВ рд╡реЗрдмрдкреИрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ 2 рд╕рдкреНрддрд╛рд╣ рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ CRA (рдХреНрд░рд┐рдПрдЯ рд░рд┐рдПрдХреНрдЯ рдРрдк) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдШрдЯрдХ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЬрд╣рд╛рдВ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ - рдЙрдиреНрд╣реЛрдВрдиреЗ рдлреНрд▓реЛ рд▓рд┐рдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП Redux рд▓рд┐рдпрд╛, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдпрд╣ рдирд┐рдХрд▓рд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХред


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


рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдкреНрд░рд▓реЗрдЦрди рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣рд╛рдВ рдПрдХ рд╣реА рд╕реНрд╡реИрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдХрд╛рдИ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рд╣реИред


рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред


рддреАрд╕рд░рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджрд╛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рд╢реНрди рдпрд╛ рдХрд╕реНрдЯрдо рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдкреБрд░рд╕реНрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдореЗрдВ рдЗрди рдкрджреЛрдВ рдХреЗ рд▓рд┐рдП - рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдЗрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрдзрд┐рдХ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкрджреЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрд▓рд╛рд╕рд┐рдХ рд░реЗрд╕реНрдЯ рдореЗрдВ, рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 3 рдкреНрд░рд╢реНрди рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред рд╣рд╛рдВ, рд╣рдо рдХрд╕реНрдЯрдо рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреБрд░рд╕реНрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕рдм 1 рдЕрдиреБрд░реЛрдз рддрдХ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЬрдЯрд┐рд▓рддрд╛ рд╣реИред



рдЪрд┐рддреНрд░рдг рдХреЗ рд▓рд┐рдП рд╕рд╛рд╢рдХреЛ рд╕реНрдЯреВрдмрд╛рдЗрд▓реЛ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж ред


рдирд┐рд░реНрдгрдп


рдФрд░ рдЗрд╕ рд╕рдордп, рдлреЗрд╕рдмреБрдХ рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред GraphQL рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдПрдХ рдордВрдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЬ рд╣рдо рдЗрд╕рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗ - рдпрд╣ рдЖрдкрдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рднрд╛рд╖рд╛ рд╣реИ, рдмрд╕ рдПрдХ рднрд╛рд╖рд╛ рд╣реИ, рдФрд░ рдХрд╛рдлреА рдЖрджрд┐рдо рд╣реИред рдФрд░ рдпрд╣ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд╕реНрдерд╛ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рднреА рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред


рдкреНрд░рд╢реНрди:


{ me { id isAcceptedFreeOffer balance } } 

рдЙрддреНрддрд░ рд╣реИ:


 { "me": { "id": 1, "isAcceptedFreeOffer": false, "balance": 100000 } } 

рд▓реЗрдХрд┐рди GraphQL рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдбреЗрдЯрд╛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдореЗрдВ рдореНрдпреВрдЯреЗрд╢рди рд╣реИрдВред рдореНрдпреВрдЯреЗрд╢рди рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИрдВ рдХрд┐ рд╣рдо рдПрдХ рд╕рдлрд▓ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдмреИрдХрдПрдВрдб рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдорд╛рд░рд╛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдЧреНрд░рд╛рдл рдХреА рд╕реАрдорд╛ рдХреЗ рдмрд╛рд╣рд░ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред


рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдПрдХ рдореБрдлреНрдд рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


 mutation { acceptOffer (_type: FREE) { id isAcceptedFreeOffer } } 

рдЬрд╡рд╛рдм рдореЗрдВ, рд╣рдореЗрдВ рд╡рд╣реА рд╕рдВрд░рдЪрдирд╛ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рдЕрдиреБрд░реЛрдз рдХреА рдЧрдИ рдереА


 { "acceptOffer": { "id": 1, "isAcceptedFreeOffer": true } } 

рдЧреНрд░рд╛рдлрд┐рдВрдХ рдмреИрдХрдПрдВрдб рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 fetch('/graphql', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query: '{me { id balance } }' }) }); 

GraphQL рдХреЗ рдлрд╛рдпрджреЗ рдХреНрдпрд╛ рд╣реИрдВ?


рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдФрд░ рдмрд╣реБрдд рд╣реА рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рднрд╛рд╖рд╛ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╕реНрд╡-рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реЛрддреА рд╣реИред рд╕рд░реНрд╡рд░ рдкрд░ GraphQL рд╕реНрдХреАрдорд╛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдХреЗ, рд╣рдо рддреБрд░рдВрдд рдХреЛрдб рдореЗрдВ рд╕реАрдзреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд░реЗрд╕реНрдЯрдлреБрд▓ рдореЗрдВ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╕реНрдпрд╛ рд╣реИред рд░реЗрдЦрд╛рдВрдХрди рдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ - рдкрджрд╛рд╡рдирддред



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


рд╣рдо рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред


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



рд▓реЗрдХрд┐рди рдорд░рд╣рдо рдореЗрдВ рдПрдХ рдордХреНрдЦреА рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рджреГрд╢реНрдпрдкрдЯрд▓ рдкрд░ GraphQL рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реА рдХрдорд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдлреНрд░рдВрдЯреЗрдВрдб рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдмреИрдХреЗрдВрдб рдЗрддрдиреА рдЖрд╕рд╛рдиреА рд╕реЗ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИ ... рдЙрдиреНрд╣реЗрдВ рдПрди + 1 рдЬреИрд╕реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд╡реЗрд░реА рд▓реЗрдВ:


 { landings(_page: 0, limit: 20) { nodes { id title } totalCount } } 

рдПрдХ рд╕рд░рд▓ рдЕрдиреБрд░реЛрдз, рд╣рдо 20 рд╕рд╛рдЗрдЯреЛрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рд╕рд╛рдЗрдЯреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдмреИрдХрдПрдВрдб рдореЗрдВ, рдпрд╣ 21 рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЬреНрдЮрд╛рдд рд╣реИ, рд╣рд▓ рд╣реИред рдиреЛрдб рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдлреЗрд╕рдмреБрдХ рд╕реЗ рдПрдХ dataloader рдкреИрдХреЗрдЬ рд╣реИред рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред


рдЧрд╣рд░реА рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ рднреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрд▓реНрдмрдо рд╣реИрдВ, рдЗрди рдПрд▓реНрдмрдореЛрдВ рдореЗрдВ рдЧрд╛рдиреЗ рд╣реИрдВ, рдФрд░ рдЧреАрдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдПрд▓реНрдмрдо рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдХрд░реЗрдВ:


 { album(id: 42) { songs { title artists } } } 

 { song(id: 1337) { title album { title } } } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреНрд╡реЗрд░реА рдорд┐рд▓рддреА рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдЖрдзрд╛рд░ рджреЗрддреА рд╣реИред


 query evil { album(id: 42) { songs { album { songs { album { 

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдиреЛрдб рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдЧрд╣рд░рд╛рдИ рд╕реАрдорд╛ рд╣реИ, рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕рдорд╛рдзрд╛рди рд╣реИрдВред


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


рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рджреЛ рдореБрдЦреНрдп рдЦрд┐рд▓рд╛рдбрд╝реА рд╣реИрдВ- рд░рд┐рд▓реЗ рдФрд░ рдЕрдкреЛрд▓реЛред


рд░рд┐рд▓реЗ


рд░рд┐рд▓реЗ рдПрдХ рдлреЗрд╕рдмреБрдХ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╣реИ, рд╡реЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЦреБрдж рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рдУрдХреБрд▓рд╕, рд╕рд░реНрдХрд▓ рд╕реАрдЖрдИ, рдЖрд░рддреА рдФрд░ рд╢реБрдХреНрд░рд╡рд╛рд░ред


рд░рд┐рд▓реЗ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреНрдпрд╛ рд╣реИрдВ?


рддрддреНрдХрд╛рд▓ рдкреНрд▓рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдлреЗрд╕рдмреБрдХ рд╣реИред рд░рд┐рдПрдХреНрдЯ, рдлреНрд▓реЛ рдФрд░ рдЧреНрд░рд╛рдлрдХреЙрдХ рдлреЗрд╕рдмреБрдХ рдХреЗ рдШрдЯрдирд╛рдХреНрд░рдо рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рднреА рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдЕрдиреБрд░реВрдк рдкрд╣реЗрд▓реА рд╣реИрдВред рд╣рдо рдЧрд┐рддреБрдм рдкрд░ рд╕рд┐рддрд╛рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╣рд╛рдВ рд╣реИрдВ, рд░рд┐рд▓реЗ рдХреЗ рдкрд╛рд╕ рд▓рдЧрднрдЧ 11,000 рд╣реИрдВ, рдЕрдкреЛрд▓реЛ рдХреЗ рдкрд╛рд╕ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП 7600 рд╣реИрдВред рд░рд┐рд▓реЗ рдореЗрдВ рдЬреЛ рдардВрдбреА рдЪреАрдЬ рд╣реИ рд╡рд╣ рд░рд┐рд▓реЗ-рдХрдВрдкрд╛рдЗрд▓рд░ рд╣реИ, рдПрдХ рдЙрдкрдХрд░рдг рдЬреЛ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд┐рд▓реНрдб рд╕реНрддрд░ рдкрд░ рдЖрдкрдХреЗ рдЧреНрд░рд╛рдлрдХреЙрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИред ред рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рд╣реА рд╣реИ:


 #  Relay-compiler foo { # type FooType id ... on FooType { # matches the parent type, so this is extraneous id } } #  foo { id } 

рд░рд┐рд▓реЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреНрдпрд╛ рд╣реИрдВ?


рдкрд╣рд▓рд╛ рдорд╛рдЗрдирд╕ * рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ SSR рдХреА рдХрдореА рд╣реИред рдЧрд┐рддреБрдм рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рдЦреБрд▓рд╛ рд╣реИред рддрд╛рд░рд╛рдВрдХрди рдХреЗ рддрд╣рдд рдХреНрдпреЛрдВ - рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╛рдлреА рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИрдВред



рдлрд┐рд░ рд╕реЗ, рд░рд┐рд▓реЗ рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рдлрдХреЙрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рдФрд░ рд░рд┐рд▓реЗ рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдкрд░ рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╣реИред



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рд▓реЗ рдкреЗрдЬреЗрд╢рди рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣рд╛рдБ рдкрд░ рд╢реНрд░рд╛рдкрдХрд░реНрддрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред


 { friends(first: 10, after: "opaqueCursor") { edges { cursor node { id name } } pageInfo { hasNextPage } } } 

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


рдлреЗрд╕рдмреБрдХ рдиреЗ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦрдХрд░ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХреАред рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП- vue-relay ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рд╕рд┐рддрд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдХрдорд┐рдЯ-рдПрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рднреА, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрд╕реНрдерд┐рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, CRA рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рд░рд┐рдПрдХреНрдЯ рдРрдк рдмрдирд╛рдПрдВ рдЖрдкрдХреЛ рд░рд┐рд▓реЗ-рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдРрдк-rewired рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЕрдкреЛрд▓реЛ


рд╣рдорд╛рд░рд╛ рджреВрд╕рд░рд╛ рдЙрдореНрдореАрджрд╡рд╛рд░ рдЕрдкреЛрд▓реЛ рд╣реИ ред рдЙрдирдХреА рдЯреАрдо рдЙрд▓реНрдХрд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИред рдЕрдкреЛрд▓реЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╕рд┐рджреНрдз рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ: AirBnB, рдЯрд┐рдХрдЯрдорд╛рд╕реНрдЯрд░, рдУрдкрдиреЗрдВрдЯреЗрдмрд▓, рдЖрджрд┐ред


рдЕрдкреЛрд▓реЛ рдХреЗ рдлрд╛рдпрджреЗ рдХреНрдпрд╛ рд╣реИрдВ?


рдкрд╣рд▓рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд▓рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдкреЛрд▓реЛ рдХреЛ рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдЕрдЬреНрдЮреЗрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдЕрдм рдХреЛрдгреАрдп рдкрд░ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдЕрдкреЛрд▓реЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЖрдк рд╕рдм рдХреБрдЫ рд╡реЗрдирд┐рд▓рд╛ рдореЗрдВ рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред


рдЕрдкреЛрд▓реЛ рдХреЗ рдкрд╛рд╕ рд╢рд╛рдВрдд рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред



рдПрдХ рдФрд░ рдкреНрд▓рд╕ рдЕрдкреЛрд▓реЛ - рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдПрдкреАрдЖрдИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, Redux рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдЖрдо рджреГрд╖реНрдЯрд┐рдХреЛрдг рдорд┐рд▓реЗрдВрдЧреЗ: ApolloProvider (рдЬреИрд╕реЗ Redux рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╡реЙрдХреНрд╕) рд╣реИ, рдФрд░ рдЕрдкреЛрд▓реЛ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:


 import { ApolloProvider } from 'react-apollo'; import { ApolloClient } from './ApolloClient'; const App = () => ( <ApolloProvider client={ApolloClient}> ... </ApolloProvider> ); 

рдШрдЯрдХ рдХреЗ рд╕реНрддрд░ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдиреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдПрдЪрдУрд╕реА рд╣реИред рдФрд░ рд╣рдо Redux рдореЗрдВ MapStateToProps рдХреА рддрд░рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдВрджрд░ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдХреНрд╡реЗрд░реА рд▓рд┐рдЦрддреЗ рд╣реИрдВред


 import { graphql } from 'react-apollo'; import gql from 'graphql-tag'; import { Landing } from './Landing'; graphql(gql` { landing(id: 1) { id title } } `)(Landing); 

рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо Redux рдореЗрдВ MapStateToProps рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рдЙрдард╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдкреЛрд▓реЛ рд╕реНрд╡рдпрдВ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рддрд╛ рд╣реИред рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░реЙрдкреНрд╕ рдШрдЯрдХ рдореЗрдВ рд╣реА рдЧрд┐рд░ рдЬрд╛рддреЗ рд╣реИрдВред


 function Landing({ data, loading, error, refetch, ...other }) { ... } 

рдпрд╣ рд╣реИ:
тАв рдбреЗрдЯрд╛;
тАв рдбрд╛рдЙрдирд▓реЛрдб рд╕реНрдерд┐рддрд┐;
тАв рдпрджрд┐ рдпрд╣ рд╣реБрдЖ рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐;
рд╣реЗрд▓рд┐рдХреЙрдкреНрдЯрд░ рдЬреИрд╕реЗ рдХрд╛рд░реНрдп рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдпрд╛ fetchMore paginate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдкреЛрд▓реЛ рдФрд░ рд░рд┐рд▓реЗ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдкреНрд▓рд╕ рднреА рд╣реИ, рдЬреЛ рдХрд┐ рдСрдкреНрдЯрд┐рдорд┐рд╕реНрдЯрд┐рдХ рдпреВрдЖрдИ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЕрдиреБрд░реЛрдз рд╕реНрддрд░ рдкрд░ рдкреВрд░реНрд╡рд╡рдд / рдлрд┐рд░ рд╕реЗ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:


 this.props.setNotificationStatusMutation({ variables: { тАж }, optimisticResponse: { тАж } }); 

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


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


 new ApolloClient({ ssrMode: true, ... }); 

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


 <script> window.__APOLLO_STATE__ = client.extract(); </script> const client = new ApolloClient({ cache: new InMemoryCache().restore(window.__APOLLO_STATE__), link }); 

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


 <script> window.__APOLLO_STATE__ = transform({тАж}); </script> const client = new ApolloClient({ cache: new InMemoryCache().restore(window.__APOLLO_STATE__), link }); 

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



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


рдЕрдкреЛрд▓реЛ рдореЗрдВ рднреА рд╡рд┐рдкрдХреНрд╖ рд╣реИ


рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдереА: рд╕реАрдорд╛ рдкрд░ 2,000 рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдпрд╣ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдереА), рдФрд░ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдПрдВ рд╢реБрд░реВ рд╣реБрдИрдВред рдбрд┐рдмрдЧрд░ рдореЗрдВ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЕрдкреЛрд▓реЛ рдкрдврд╝рдиреЗ рдХреЗ рджреМрд░рд╛рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрджреНрджрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реИ, рдЕрдм рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдПрдХ рдкрд╛рдк рдерд╛ред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, refetch рдмрд╣реБрдд рд╣реА рдЕрд╡рд┐рд╢реНрд╡рд╛рд╕реА рдирд┐рдХрд▓рд╛ ...


 function Landing({ loading, refetch, ...other }) { ... } 

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


рдРрд╕рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ InformOnNetworkStatusChange рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдПрдЪрдУрд╕реА рдореЗрдВ рд╕рд╣реА рд╣реИ, рдпрд╛ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рд░реАрдлреЗрдХ рд╕реНрдЯреЗрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВред


рдЕрдкреЛрд▓реЛ рдмрдирд╛рдоред рд░рд┐рд▓реЗ


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рдРрд╕реА рддрд╛рд▓рд┐рдХрд╛ рдорд┐рд▓реА, рд╣рдо рд╕рднреА рдХрд╛ рд╡рдЬрди, рдЧрд┐рдирд╛ рдЧрдпрд╛, рдФрд░ рдЕрдкреЛрд▓реЛ рдХреЗ рдкреАрдЫреЗ рд╣рдорд╛рд░рд╛ 76% рдерд╛ред



рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЪреБрдирд╛ рдФрд░ рдХрд╛рдо рдкрд░ рдЪрд▓реЗ рдЧрдПред


рд▓реЗрдХрд┐рди рдореИрдВ рдЯреВрд▓рдХрд┐рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред


рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдРрдб-рдСрди рд╣реИрдВ, рдХрд╣реАрдВ рдмреЗрд╣рддрд░, рдХрд╣реАрдВ рдмрджрддрд░ред рдЕрдкреЛрд▓реЛ-рдХреЛрдбрдЧреЗрди рднреА рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╡рд╛рд╣-рдкреНрд░рдХрд╛рд░, рдФрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдПрдкреАрдЖрдИ рд╕реЗ рд╕реНрдХреАрдорд╛ рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИред


рд╢реАрд░реНрд╖рдХ "рдкрд╛рдЧрд▓ рд╣рд╛рде" рдпрд╛ рд╣рдордиреЗ рдШрд░ рдкрд░ рдХреНрдпрд╛ рдХрд┐рдпрд╛


рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рдереА рдХрд┐ рд╣рдореЗрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред


 graphql(BalanceQuery)(BalanceItem); 

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ: рд▓реЛрдбрд┐рдВрдЧ, рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗред рд╣рдордиреЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╣реМрдЬ (asyncCard) рд▓рд┐рдЦрд╛ рд╣реИ, рдЬреЛ graqhql рдФрд░ asyncCard рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред


 compose( graphql(BalanceQuery), AsyncCard )(BalanceItem); 

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


 const LandingItem = ({ content }: Props) => ( <LandingItemStyle> тАж </LandingItemStyle> ); LandingItem.fragment = gql` fragment LandingItem on Landing { ... } `; 

рдЕрдм, рдШрдЯрдХ рдЙрдкрдпреЛрдЧ рд╕реНрддрд░ рдкрд░, рд╣рдо рдЕрдВрддрд┐рдо рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЗрд╕рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


 query LandingsDashboard { landings(...) { nodes { ...LandingItem } totalCount } ${LandingItem.Fragment} } 

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


 const LandingItem = ({ content }: Props) => ( <LandingItemStyle> тАж <LandingItemStatus тАж /> </LandingItemStyle> ); LandingItem.fragment = gql` fragment LandingItem on Landing { ... status } `; 

рд╣рдореЗрдВ рдФрд░ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдереА?


рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдкрд░ рд╣рдорд╛рд░реЗ рдХрдИ рд╡рд┐рдЬреЗрдЯ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЙрдирдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрд░реЛрдз рдХрд┐рдПред



рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рд╕рдм рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд▓рдВрдмреА рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдВрдЪ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред рдпрд╣ рднреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-рдмреИрдЪ-http рд╣реИ


 new BatchHttpLink({ batchMax: 10, batchInterval: 10 }); 

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


рдореИрдВ рдЕрд▓рдЧ рд╕реЗ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЖрдЦрд┐рд░реА рдЧрд┐рд░рд╛рд╡рдЯ рдкрд╣рд▓реЗ рдЕрдкреЛрд▓реЛ рд╕реЗ рджреВрд╕рд░реЗ рддрдХ рдПрдХ рдЕрджреНрдпрддрди рдереА


рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЕрдкреЛрд▓реЛ рдФрд░ рд░реЗрдбрдХреНрд╕ рдереЗ


 'react-apollo' 'redux' 

рдлрд┐рд░ рдЕрдкреЛрд▓реЛ рдЕрдзрд┐рдХ рдореЙрдбреНрдпреВрд▓рд░ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдп рдмрди рдЧрдпрд╛, рдЗрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╣реА рдЕрдкреЛрд▓реЛ-рдХреИрд╢-рдЗрдирдореЛрд░реАред


 'react-apollo' 'apollo-client' 'apollo-link-batch-http' 'apollo-cache-inmemory' 'graphql-tag' ' 'react-apollo' 'apollo-client' 'apollo-link-batch-http' 'apollo-cache-inmemory' 'graphql-tag' 

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ Redux рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред


рдирд┐рд╖реНрдХрд░реНрд╖:


  1. рд╕реБрд╡рд┐рдзрд╛-рд╡рд┐рддрд░рдг рдХрд╛ рд╕рдордп рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, Redux рдореЗрдВ рдХрдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдмреИрдХрдПрдВрдб рдХреЛ рдХрдо рд╕реНрдкрд░реНрд╢ рдХрд░рддреЗ рд╣реИрдВ
  2. рдПрдВрдЯреАрдлреНрд░реЗрдЧреИрд▓рд┐рдЯреА рджрд┐рдЦрд╛рдИ рджреА рдХреНрдпреЛрдВрдХрд┐ рдПрдкреАрдЖрдИ рдХрд╛ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЖрдкрдХреЛ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рдлреНрд░рдВрдЯрдПрдВрдб рдПрдХ рдЪреАрдЬ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмреИрдХреЗрдВрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред
  3. рдпрджрд┐ рдЖрдк рдЧреНрд░рд╛рдлрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ - рдЕрдкреЛрд▓реЛ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдирд┐рд░рд╛рд╢ рди рд╣реЛрдВред

PS рдЖрдк рд░рд╛рдордмрд▓рд░ рдлреНрд░рдВрдЯ рдФрд░ рдореАрдЯ # 4 рдкрд░ рдореЗрд░реА рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реЗ рдПрдХ рд╡реАрдбрд┐рдпреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ


Source: https://habr.com/ru/post/hi418417/


All Articles