Redux рдмрдирд╛рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ



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

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдм рдХреЙрдиреНрдЯреЗрдХреНрдЯ рдПрдкреАрдЖрдИ рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдПрдХ рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ (рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдирд╣реАрдВ)ред

16.3 рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рд▓реЗрдЦ рджрд┐рдЦрд╛рдИ рджрд┐рдП рдХрд┐ рдирдП рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рдХреЗ рдХрд╛рд░рдг Redux рдХреА рдореГрддреНрдпреБ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИред рдпрджрд┐ рдЖрдкрдиреЗ рд░реЗрдбрдХреНрд╕ рд╕реЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрд╛ рдерд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рд╣реЛрдЧрд╛ - "рдореЗрд░реА рдореМрдд рдХреА рдЦрдмрд░реЗрдВ рдмрд╣реБрдд рдЕрддрд┐рд░рдВрдЬрд┐рдд рд╣реИрдВ ред"

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдирдпрд╛ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдПрдкреАрдЖрдИ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ Redux рдХреА рддрд░рд╣ рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬрдм рдЖрдк Redux рдХреЗ рдмрдЬрд╛рдп Context рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ Context рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ Redux рдХреА рдЬрдЧрд╣ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрд╡реЗрджрди рдЙрджрд╛рд╣рд░рдг


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

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



рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИ: рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдореЗрдВ рдФрд░ рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╕рд╛рдЗрдб рдкреИрдирд▓ рдореЗрдВред

(рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЯреНрд╡рд┐рдЯрд░ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕реА рд╕рдорд╛рдирддрд╛рдПрдБ рд╣реИрдВред рдпрд╣ рдХреЛрдИ рд╕рдВрдпреЛрдЧ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЗ рд░рд┐рдПрдХреНрдЯ рдХреМрд╢рд▓ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдХреЙрдкреА рдХрд░рдирд╛ (рдореМрдЬреВрджрд╛ рд╕рд╛рдЗрдЯреЛрдВ / рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкреНрд░рддрд┐рдХреГрддрд┐рдпрд╛рдВ рдмрдирд╛рдирд╛) ред

рдШрдЯрдХ рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:



рд╢реБрджреНрдз рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ (рдХреЗрд╡рд▓ рдкреНрд░реЙрдкреНрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреЗрдбрд╝ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдЬрд╝рд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдШрдЯрдХреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдРрдк рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

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

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреЛрдб рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕рдм рдХреБрдЫ рдбрд╛рд▓ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХреБрдЫ рдорд╛рдирдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкрд╛рд▓рди тАЛтАЛрдХрд░рддреЗ рд╣реБрдП рд╕рдВрднрд╡рддрдГ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛)ред

import React from "react"; import ReactDOM from "react-dom"; import "./styles.css"; const UserAvatar = ({ user, size }) => ( <img className={`user-avatar ${size || ""}`} alt="user avatar" src={user.avatar} /> ); const UserStats = ({ user }) => ( <div className="user-stats"> <div> <UserAvatar user={user} /> {user.name} </div> <div className="stats"> <div>{user.followers} Followers</div> <div>Following {user.following}</div> </div> </div> ); const Nav = ({ user }) => ( <div className="nav"> <UserAvatar user={user} size="small" /> </div> ); const Content = () => <div className="content">main content here</div>; const Sidebar = ({ user }) => ( <div className="sidebar"> <UserStats user={user} /> </div> ); const Body = ({ user }) => ( <div className="body"> <Sidebar user={user} /> <Content user={user} /> </div> ); class App extends React.Component { state = { user: { avatar: "https://www.gravatar.com/avatar/5c3dd2d257ff0e14dbd2583485dbd44b", name: "Dave", followers: 1234, following: 123 } }; render() { const { user } = this.state; return ( <div className="app"> <Nav user={user} /> <Body user={user} /> </div> ); } } ReactDOM.render(<App />, document.querySelector("#root")); 


CodeSandbox рдирдореВрдирд╛ рдХреЛрдб

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

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

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

рдмрд╛рд░реАрдХреА рд╕реЗ рдпреБрдЧреНрдорд┐рдд рдШрдЯрдХ (рдЬреИрд╕реЗ рдХрд┐ рдЬреЛ рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рд╕рд╣рд╛рд░рд╛ рджреЗрддреЗ рд╣реИрдВ) рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рднреА рдЖрдк рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирдИ рдЬрдЧрд╣ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдирдП рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рдВрдзрдирд╛ рд╣реЛрдЧрд╛ред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рд╕рдВрдЧ рдпрд╛ Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ ...


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

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

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

( рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдбреИрди рдЕрдмреНрд░рд╛рдореЛрд╡ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж!)

 import React from "react"; import ReactDOM from "react-dom"; import "./styles.css"; const UserAvatar = ({ user, size }) => ( <img className={`user-avatar ${size || ""}`} alt="user avatar" src={user.avatar} /> ); const UserStats = ({ user }) => ( <div className="user-stats"> <div> <UserAvatar user={user} /> {user.name} </div> <div className="stats"> <div>{user.followers} Followers</div> <div>Following {user.following}</div> </div> </div> ); //  children   . const Nav = ({ children }) => ( <div className="nav"> {children} </div> ); const Content = () => ( <div className="content">main content here</div> ); const Sidebar = ({ children }) => ( <div className="sidebar"> {children} </div> ); // Body   sidebar  content,    , //    . const Body = ({ sidebar, content }) => ( <div className="body"> <Sidebar>{sidebar}</Sidebar> {content} </div> ); class App extends React.Component { state = { user: { avatar: "https://www.gravatar.com/avatar/5c3dd2d257ff0e14dbd2583485dbd44b", name: "Dave", followers: 1234, following: 123 } }; render() { const { user } = this.state; return ( <div className="app"> <Nav> <UserAvatar user={user} size="small" /> </Nav> <Body sidebar={<UserStats user={user} />} content={<Content />} /> </div> ); } } ReactDOM.render(<App />, document.querySelector("#root")); 


CodeSandbox рдирдореВрдирд╛ рдХреЛрдб

рдпрджрд┐ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ (рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ!), рддреЛ рдпрд╣ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк Redux рдХреЗ рд╕рд╛рде рдкреНрд░реЙрдкреНрд╕ рдлреЙрд░рд╡рд░реНрдбрд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

Redux рдЙрджрд╛рд╣рд░рдг


рдореИрдВ Redux рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдбрд╛рд▓реВрдВрдЧрд╛ рддрд╛рдХрд┐ рд╣рдо рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭ рд╕рдХреЗрдВ рдХрд┐ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Redux рдХреА рд╕реНрдкрд╖реНрдЯ рд╕рдордЭ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ Redux рд╕реЗ рдореЗрд░рд╛ рдкрд░рд┐рдЪрдп рдкрдврд╝реЗрдВ (рдпрд╛ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦреЗрдВ )ред

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

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

рд░реЗрдбреНрдпреВрд╕рд░ рдпрд╣рд╛рдБ рдмрд╣реБрдд рдХрдо рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдмрд╛рдд рд╣реИ рдХрд┐ Redux Reducers рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХреЛрдб рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ ред

 import React from "react"; import ReactDOM from "react-dom"; //    createStore, connect, and Provider: import { createStore } from "redux"; import { connect, Provider } from "react-redux"; //  reducer       . const initialState = {}; function reducer(state = initialState, action) { switch (action.type) { //    action SET_USER  state. case "SET_USER": return { ...state, user: action.user }; default: return state; } } //  store  reducer'   . const store = createStore(reducer); // Dispatch' action     user. store.dispatch({ type: "SET_USER", user: { avatar: "https://www.gravatar.com/avatar/5c3dd2d257ff0e14dbd2583485dbd44b", name: "Dave", followers: 1234, following: 123 } }); //   mapStateToProps,      state (user) //     `user` prop. const mapStateToProps = state => ({ user: state.user }); //  UserAvatar    connect(),    //`user` ,      . //     2 : // const UserAvatarAtom = ({ user, size }) => ( ... ) // const UserAvatar = connect(mapStateToProps)(UserAvatarAtom); const UserAvatar = connect(mapStateToProps)(({ user, size }) => ( <img className={`user-avatar ${size || ""}`} alt="user avatar" src={user.avatar} /> )); //   UserStats    connect(),    // `user` . const UserStats = connect(mapStateToProps)(({ user }) => ( <div className="user-stats"> <div> <UserAvatar /> {user.name} </div> <div className="stats"> <div>{user.followers} Followers</div> <div>Following {user.following}</div> </div> </div> )); //    Nav      `user`. const Nav = () => ( <div className="nav"> <UserAvatar size="small" /> </div> ); const Content = () => ( <div className="content">main content here</div> ); //   Sidebar. const Sidebar = () => ( <div className="sidebar"> <UserStats /> </div> ); //   Body. const Body = () => ( <div className="body"> <Sidebar /> <Content /> </div> ); //  App    ,     . const App = () => ( <div className="app"> <Nav /> <Body /> </div> ); //     Provider, //   connect()    store. ReactDOM.render( <Provider store={store}> <App /> </Provider>, document.querySelector("#root") ); 


CodeSandbox рдирдореВрдирд╛ рдХреЛрдб

рдЕрдм рдЖрдк рд╢рд╛рдпрдж рд╕реЛрдЪ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ рдХрд┐ Redux рдЗрд╕ рдЬрд╛рджреВ рдХреЛ рдХреИрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИред рд░рд┐рдПрдХреНрдЯ рдХрдИ рд╕реНрддрд░реЛрдВ рдкрд░ рдкрд╛рд╕рд┐рдВрдЧ рдкреНрд░реЙрдкрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреНрдпрд╛ Redux рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

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

рд╕рдВрджрд░реНрдн рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдмрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИ: рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реА рд╢рдХреНрддрд┐ (рдбреЗрдЯрд╛) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛- redux рдХрдиреЗрдХреНрдЯ рдмрд╕ рдпрд╣реА рдХрд░рддрд╛ рд╣реИред

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

рдХрдиреЗрдХреНрдЯ рдПрдХ рд╢реБрджреНрдз рдХрд╛рд░реНрдп рд╣реИ

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

Redux рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рди рдбрд┐рдмрдЧрд┐рдВрдЧ

рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд░рд┐рдпрд╛ рдФрд░ рд░рд┐рдбреНрдпреВрд╕рд░реНрд╕ рдХреЗ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЕрджреНрднреБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрддреБрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд░реЗрдбрдХреНрд╕ рдЖрдкрдХреЛ рджреЗрддрд╛ рд╣реИред

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



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

LogRocket рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рднреА рд╣реИрдВ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕реНрдерд╛рдпреА Redux DevTools рджреЗрддреЗ рд╣реИрдВред рдПрдХ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдорд┐рд▓реА? рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред LogRocket рдореЗрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рдХреЛ рджреЗрдЦреЗрдВ, рдФрд░ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕рдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдФрд░ рдХреНрдпрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╢реБрд░реВ рдХреА рдЧрдИред рдпрд╣ рд╕рдм Redux рдПрдХреНрд╢рди рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде Redux рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ...

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

рдпрд╣рд╛рдБ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣реИ рдХрд┐ рдХреИрд╕реЗ Redux рдорд┐рдбрд▓рд╡реЗрдпрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рдеред

React Context API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ


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

рдирдпрд╛ рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рд╢рд╛рдпрдж рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдкрдврд╝рдиреЗ (3:43) рдХреЗ рдмрдЬрд╛рдп рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореИрдВрдиреЗ рдПрдЧрд╣реЗрдб рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИред

рдпрд╣рд╛рдБ рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рдХреЗ 3 рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдХ рд╣реИрдВ:

  • React.createContext рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИ
  • рдкреНрд░рджрд╛рддрд╛ (рд░рд┐рдЯрд░реНрди рдХреНрд░реЛрдирдЯреЗрдХреНрд╕реНрдЯ), рдЬреЛ "рдмрд╕" рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ,
    рдШрдЯрдХ рдкреЗрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИ
  • рдЙрдкрднреЛрдХреНрддрд╛ (createContext рднреА рд▓реМрдЯрд╛) рдЬреЛ рдЗрд╕рдореЗрдВ рднрд┐рдЧреЛ рджреЗрддрд╛ рд╣реИ
    рдбреЗрдЯрд╛ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЗ рд▓рд┐рдП "рдЗрд▓реЗрдХреНрдЯреНрд░рд┐рдХ рдмрд╕"

рдкреНрд░рджрд╛рддрд╛ рд░рд┐рдПрдХреНрдЯ-рд░реЗрдбрдХреНрд╕ рдореЗрдВ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣ рдПрдХ рдРрд╕рд╛ рдореВрд▓реНрдп рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдпрд╣ рдПрдХ Redux рд╕реНрдЯреЛрд░ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рдпрд╣ рдмреЗрд╡рдХреВрдлреА рд╣реЛрдЧреА)ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдФрд░ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

рдпрд╣рд╛рдБ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ:

 //     context //    2 : { Provider, Consumer } // ,   ,  UpperCase,  camelCase //  ,          , //        . const UserContext = React.createContext(); // ,     context, //   Consumer. // Consumer   "render props". const UserAvatar = ({ size }) => ( <UserContext.Consumer> {user => ( <img className={`user-avatar ${size || ""}`} alt="user avatar" src={user.avatar} /> )} </UserContext.Consumer> ); // ,      "user prop", //   Consumer    context. const UserStats = () => ( <UserContext.Consumer> {user => ( <div className="user-stats"> <div> <UserAvatar user={user} /> {user.name} </div> <div className="stats"> <div>{user.followers} Followers</div> <div>Following {user.following}</div> </div> </div> )} </UserContext.Consumer> ); // ...    ... // ... (      `user`). //  App   context ,  Provider. class App extends React.Component { state = { user: { avatar: "https://www.gravatar.com/avatar/5c3dd2d257ff0e14dbd2583485dbd44b", name: "Dave", followers: 1234, following: 123 } }; render() { return ( <div className="app"> <UserContext.Provider value={this.state.user}> <Nav /> <Body /> </UserContext.Provider> </div> ); } } 


CodeSandbox рдирдореВрдирд╛ рдХреЛрдб

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдпрд╛рдж рд░рдЦреЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рднрд╛рдЧ рд╣реИрдВ: рд╕рдВрджрд░реНрдн (React.createContext рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛) рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рдШрдЯрдХ (рдкреНрд░рджрд╛рддрд╛ рдФрд░ рдЙрдкрднреЛрдХреНрддрд╛)ред

рдкреНрд░рджрд╛рддрд╛ рдФрд░ рдЙрдкрднреЛрдХреНрддрд╛ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ

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

рдкреНрд░рд╕рдВрдЧ рдореЗрдВ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ

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

рдЬрдм рдЖрдк рдПрдХ рд╕рдВрджрд░реНрдн рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 const Ctx = React.createContext(yourDefaultValue); 


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

рдЙрдкрднреЛрдХреНрддрд╛ рд░реЗрдВрдбрд░ рдкреНрд░реЙрдкреНрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ

рдХрдиреЗрдХреНрдЯ Redux рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЙрдЪреНрдЪ рдЖрджреЗрд╢ рдШрдЯрдХ (рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ HoC) рд╣реИред рдпрд╣ рдПрдХ рдФрд░ рдШрдЯрдХ рд▓рдкреЗрдЯрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдкреНрд░реЙрдкрд░ рдЧреБрдЬрд░рддрд╛ рд╣реИред

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

рдкреНрд░рджрд╛рддрд╛ рдПрдХ рдореВрд▓реНрдп рд▓реЗрддрд╛ рд╣реИред

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

рдкреНрд░рд╕рдВрдЧ рдПрдкреАрдЖрдИ рд▓рдЪреАрд▓рд╛


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

HOC рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ рдЙрдкрднреЛрдХреНрддрд╛

рд╣рд░ рдЙрд╕ рдЬрдЧрд╣ рдХреЗ рдЖрд╕рдкрд╛рд╕ UserContext.Consumer рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╣ рдЖрдкрдХрд╛ рдХреЛрдб рд╣реИ! рдЖрдкрдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ рдХрд┐ рдЖрдкрдХреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдкрд╕рдВрдж рдХреНрдпрд╛ рд╣реЛрдЧреАред

рдпрджрд┐ рдЖрдк рдореВрд▓реНрдп рдХреЛ рдкреНрд░реЛрдк рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдкрднреЛрдХреНрддрд╛ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЫреЛрдЯрд╛ рдЖрд╡рд░рдг рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 function withUser(Component) { return function ConnectedComponent(props) { return ( <UserContext.Consumer> {user => <Component {...props} user={user}/>} </UserContext.Consumer> ); } } 

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдЕрд╡рддрд╛рд░ withUser рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ:

 const UserAvatar = withUser(({ size, user }) => ( <img className={`user-avatar ${size || ""}`} alt="user avatar" src={user.avatar} /> )); 

рдФрд░ рд╡реЙрдЗрд▓рд╛, рд╕рдВрджрд░реНрдн рдХрдиреЗрдХреНрдЯ Redux рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рдЗрдирд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдлрд╛рдИред

рдпрд╣рд╛рдБ рдЗрд╕ HOC рдХреЗ рд╕рд╛рде CodeSandbox рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рд░рд╛рдЬреНрдп рд░рдЦреЗрдВ

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

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

 class UserStore extends React.Component { state = { user: { avatar: "https://www.gravatar.com/avatar/5c3dd2d257ff0e14dbd2583485dbd44b", name: "Dave", followers: 1234, following: 123 } }; render() { return ( <UserContext.Provider value={this.state.user}> {this.props.children} </UserContext.Provider> ); } } // ...    ... const App = () => ( <div className="app"> <Nav /> <Body /> </div> ); ReactDOM.render( <UserStore> <App /> </UserStore>, document.querySelector("#root") ); 

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

рдЗрд╕ UserStore рдХреЗ рд╕рд╛рде рдПрдХ CodeSandbox рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдиреАрдЪреЗ рдлреЗрдВрдХ рджреЗрдВ

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рд╡рд╕реНрддреБ рдореЗрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдирд╛рдо рднреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ: рдкреГрд╖реНрдарднреВрдорд┐ рд░рдВрдЧ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрдорд░рд╛ - рдУрд╣, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдкреНрд░рдХрд╛рд╢ред



рд░рд╛рдЬреНрдп рд╕реНрдЯреЛрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рднреА рд╣реЛрддрд╛ рд╣реИред рд░рд╛рдЬреНрдп рдФрд░ рдлрд╝рдВрдХреНрд╢рди рджреЛрдиреЛрдВ рдХреЛ рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 import React from "react"; import ReactDOM from "react-dom"; import "./styles.css"; //  context. const RoomContext = React.createContext(); // ,     //   . class RoomStore extends React.Component { state = { isLit: false }; toggleLight = () => { this.setState(state => ({ isLit: !state.isLit })); }; render() { //  state  onToggleLight action return ( <RoomContext.Provider value={{ isLit: this.state.isLit, onToggleLight: this.toggleLight }} > {this.props.children} </RoomContext.Provider> ); } } //    ,    , //       RoomContext. const Room = () => ( <RoomContext.Consumer> {({ isLit, onToggleLight }) => ( <div className={`room ${isLit ? "lit" : "dark"}`}> The room is {isLit ? "lit" : "dark"}. <br /> <button onClick={onToggleLight}>Flip</button> </div> )} </RoomContext.Consumer> ); const App = () => ( <div className="app"> <Room /> </div> ); //     RoomStore, //           . ReactDOM.render( <RoomStore> <App /> </RoomStore>, document.querySelector("#root") ); 

рдпрд╣рд╛рдБ CodeSandbox рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рддреЛ рдЖрдЦрд┐рд░рдХрд╛рд░, рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╕рдВрджрд░реНрдн рдпрд╛ Redux?

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

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

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

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

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

рдЖрдЬ, рдпрджрд┐ Redux рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдЖрдк рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реАрдЦрдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ - рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдЙрдкрдХрд░рдг рд╣реИрдВ!

рдореЗрд░реА рд╕рд▓рд╛рд╣ рд╣реИ рдЙрди рд╕рднреА рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ :)

рдПрдХ рдХрджрдо-рджрд░-рдЪрд░рдг рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП, рдореЗрд░реА рдкреБрд╕реНрддрдХ , рд╢реБрджреНрдз рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрдврд╝реЗрдВ ред

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


All Articles