React: [ESLint] 'рд╕рдВрдкреВрд░реНрдг-рдбрд┐рдкреНрд╕' рд▓рд┐рдВрдЯ рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдлрд╝рд░ре░ 2019  ┬╖  111рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/react

рд╕рд╛рдорд╛рдиреНрдп рдЙрддреНрддрд░

рдореИрдВ

рд╣рдордиреЗ рдХреБрдЫ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреЛрд╕реНрдЯ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛: https://github.com/facebook/react/issues/14920#issuecomment -471070149ред

рдореИрдВ


рдпрд╣ рдХреНрдпрд╛ рд╣реИ

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

autofix demo

рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди

yarn add eslint-plugin-react-hooks<strong i="18">@next</strong>
# or
npm install eslint-plugin-react-hooks<strong i="19">@next</strong>

рдИрдПрд╕рдПрд▓рд┐рдВрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди:

{
  "plugins": ["react-hooks"],
  // ...
  "rules": {
    "react-hooks/rules-of-hooks": 'error',
    "react-hooks/exhaustive-deps": 'warn' // <--- THIS IS THE NEW RULE
  }
}

рдирд┐рдпрдо рдХрд╛рд░реНрдп рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛:

function Foo(props) {
  useEffect(() => {
    console.log(props.name);
  }, []); // <-- should error and offer autofix to [props.name]
}

рд▓рд┐рдВрдЯ рдирд┐рдпрдо рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдХреЛрдб рдареАрдХ рд╣реИ!

рдпрджрд┐ рдпрд╣ рдирдпрд╛ react-hooks/exhaustive-deps рд▓рд┐рдВрдЯ рдирд┐рдпрдо рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рд╕рд╣реА рд╣реИ , рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕ рдЕрдВрдХ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВред


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ

рдХреГрдкрдпрд╛ рдЗрди рддреАрди рдЪреАрдЬреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓

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

please

рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдорд▓рд╛ рд╕рд░рд▓ рд╣реИ, рдореИрдВ рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛!

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

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

ESLint Rules Discussion

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

рд╣рдордиреЗ рдЖрдЬ @threepointone рдХреЗ рд╕рд╛рде рдЗрди рдкрд░ рдПрдХ рдкрд╛рд╕ рдХрд┐рдпрд╛ред рдпрд╣рд╛рдБ рдПрдХ рд╕рд╛рд░рд╛рдВрд╢ рд╣реИ:

рд▓рд┐рдВрдЯ рдирд┐рдпрдо рдореЗрдВ рдлрд┐рдХреНрд╕реНрдб

рдЕрддрд┐рд░рд┐рдХреНрдд useEffect рдирд┐рд░реНрднрд░рддрд╛рдПрдВ

рдирд┐рдпрдо рдЖрдкрдХреЛ "рдмрд╛рд╣рд░реА" рд╡рд┐рд╡рд░рдг рдХреЛ useEffect рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рдиреВрдиреА рдкрд░рд┐рджреГрд╢реНрдп рдореМрдЬреВрдж рд╣реИрдВред

рдПрдХ рд╣реА рдШрдЯрдХ рдореЗрдВ рдХрд╛рд░реНрдп рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡ рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд

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

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рд╡рд░реНрде рдлрд┐рдХреНрд╕рд┐рдВрдЧ

рдкреНрд░реЙрдкреНрд╕ рдЪреЗрдВрдЬ рдкрд░ рд╕реНрдЯреЗрдЯ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛

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

"рдореЗрд░рд╛ рдЧреИрд░-рдХрд╛рд░реНрдп рдорд╛рди рд╕реНрдерд┐рд░ рд╣реИ"

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

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

const useFetch = createFetch({ /* config object */});
const useDebounce = createDebounce(500);
const FormInput = createInput({ rules: [emailValidator, phoneValidator] });

рддрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддрдм рддрдХ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛ рдЬрдм рддрдХ рдЖрдк рдЗрд╕реЗ рд░реЗрдВрдбрд░ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рдбрд╛рд▓рддреЗред (рдЬреЛ рдЖрдкрдХреЗ рд╣реБрдХ рдХрд╛ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред) рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ <Slider min={50} /> рдХрднреА рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ - рдХреЛрдИ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ <Slider min={state ? 50 : 100} /> рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЛрдИ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

let slider
if (isCelsius) {
  slider = <Slider min={0} max={100} />
} else {
  slider = <Slider min={32} max={212} />
}

рдЕрдЧрд░ рдХреЛрдИ рд░рд╛рдЬреНрдп рдореЗрдВ isCelsius рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИ, рддреЛ min рдХрднреА рдирд╣реАрдВ рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдШрдЯрдХ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ Slider рд╡рд╣реА рд╣реЛрдЧрд╛ (рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдкреЗрдбрд╝ рдореЗрдВ рдЗрд╕рдХреА рд╡рд╣реА рд╕реНрдерд┐рддрд┐ рд╣реИ)ред рддреЛ рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ рдкреНрд░рдореБрдЦ рдлреБрдЯрдЧрди рд╣реИред рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдПрдХ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдкрдбреЗрдЯ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛рдУрдВ рдХреА рддрд░рд╣ рд╣реА рдкреНрд░рд╕реНрддреБрдд рд╣реЛрддреЗ рд╣реИрдВ (рдЖрдк рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддреЗ рдХрд┐ рдХреМрди рд╕рд╛ рд╣реИ)ред рдЪрд╛рд╣реЗ рдЖрдк рдкреНрд░реЛрдк рд╡реИрд▓реНрдпреВ рдмреА рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ, рдпрд╛ рдЪрд╛рд╣реЗ рдЖрдк рдкреНрд░реЛрдк рд╡реИрд▓реНрдпреВ рдП рд╕реЗ рдмреА рддрдХ рдЬрд╛рдПрдВ - рдпрд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

function useMyHook(a) {
  const initialA = usePossiblyStaleValue(a);
  // ...
}

function usePossiblyStaleValue(value) {
  const ref = useRef(value);

  if (process.env.NODE_ENV !== 'production') {
    if (ref.current !== value) { // Or your custom comparison logic
      console.error(
        'Unlike normally in React, it is not supported ' +
        'to pass dynamic values to useMyHook(). Sorry!'
      );
    }
  }

  return ref.current;
}

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

"рдореЗрд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдорд╛рди рд╕реНрдерд┐рд░ рд╣реИ"

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

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

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

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

рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЕрднреА рднреА рдЗрд╕реЗ useCallback рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдпрд╣ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИ , рдФрд░ рдЖрдк рдмрдЧ рдХреЛ рдЬреЛрдЦрд┐рдо рдореЗрдВ рдбрд╛рд▓реЗ рдмрд┐рдирд╛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЬреИрд╕реЗ onChange={shouldHandle ? handleChange : null} рдпрд╛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ foo ? <Page fetch={fetchComments /> : <Page fetch={fetchArticles /> рд░реЗрдВрдбрд░ рдХрд░рдирд╛ред рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ fetchComments рдЬреЛ рдореВрд▓ рдШрдЯрдХ рд╕реНрдерд┐рддрд┐ рдкрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣реА рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдЗрд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЪреБрдкрдЪрд╛рдк рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рд╕рдВрджрд░реНрдн рд╡рд╣реА рд░рд╣реЗрдЧрд╛ред рддреЛ рдЖрдкрдХрд╛ рдмрдЪреНрдЪрд╛ рдЙрд╕ рдЕрдкрдбреЗрдЯ рд╕реЗ рдЪреВрдХ рдЬрд╛рдПрдЧрд╛ - рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдЪреНрдЪреЗ рдХреЛ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдШрдЯрдХреЛрдВ рдФрд░ useCallback , рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд╣рдЪрд╛рди рд╕реНрд╡рдпрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ - рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛред рддреЛ рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдФрд░ рдмрдЪрдиреЗ рдореЗрдВ рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реИред

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

useWarnAboutTooFrequentChanges([deps]);

рдпрд╣ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдФрд░ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛рдлреА рдШрдЯрд┐рдпрд╛ рд╣реЛрддреЗ рд╣реИрдВред рдирд┐рдпрдо рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдлрд┐рдХреНрд╕ rules рд╕реНрдерд┐рд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреЛ createTextInput(rules) рдмрджрд▓рдХрд░, рдФрд░ register рдФрд░ unregister рдХреЛ useCallback рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ register рдФрд░ unregister рд╣рдЯрд╛ рджреЗрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рд╕реЗ рдмрджрд▓реЗрдВ рдЬрд╣рд╛рдВ рдЖрдк рдЕрдХреЗрд▓реЗ dispatch рдбрд╛рд▓рддреЗ рд╣реИрдВред рдлрд┐рд░ рдЖрдк рдЧрд╛рд░рдВрдЯреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╕реЗ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рдЪрд╛рди рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧреАред

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

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

рдпреМрдЧрд┐рдХ рдореВрд▓реНрдп рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдкреНрд░рднрд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╣реИред рдПрдХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд╡рд╣реА "рд▓реЙрдЧ" (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдлреЙрд░реНрдо рд╕рдмрдорд┐рдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ рдЕрдЧрд░ рд╣рдо рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдШрдЯрдХ рдЕрдирдорд╛рдЙрдВрдЯ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдкреНрд░рднрд╛рд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдареАрдХ рдмрд╛рдж рдЕрдирдорд╛рдЙрдВрдЯ рд╣реЛ рдЬрд╛рдП? рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдлреЙрд░реНрдо рдЬрдорд╛ рдХрд░рдиреЗ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╕рд┐рд░реНрдл "рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП"ред рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рднрд╛рд╡ рд╡рд╣рд╛рдВ рдЧрд▓рдд рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЙрд╕ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЖрдк рдЕрднреА рднреА рд╡рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдереА - рдЗрд╕рдХреЗ рдмрдЬрд╛рдп fullName рдХреЛ setSubmittedData({firstName, lastName}) рдмрдирд╛рдХрд░, рдФрд░ рдлрд┐рд░ [submittedData] рдЖрдкрдХреА рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк firstName рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ lastName ред

рдЕрдирд┐рд╡рд╛рд░реНрдп/рд╡рд┐рд░рд╛рд╕рдд рд╕рдВрд╣рд┐рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг

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


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

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

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрддреНрддрд░ рд╣реИ: https://github.com/facebook/react/issues/14920#issuecomment -466145690

рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕

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

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

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

рдкреБрди: https://github.com/facebook/react/issues/14920#issuecomment -466144466

@billyjanitsch рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛? https://codesandbox.io/s/jpx1pmy7ry

рдореИрдВрдиреЗ useState рдХреЛ indeterminate useState рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬреЛ defaultIndeterminate рдкреНрд░рд╛рд░рдВрдн рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рддрдм рдкреНрд░рднрд╛рд╡ [indeterminate] рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕реЗ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдиреЗ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛? рддреЛ рдХреЛрдб рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИред

рддреЛ рдореБрдЭреЗ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд (рдХрд┐рдирд╛рд░реЗ?) рдорд╛рдорд▓рд╛ рдорд┐рд▓рд╛ рдЬрд╣рд╛рдВ рдореИрдВ рдХреБрдЫ рдПрдЪрдЯреАрдПрдордПрд▓ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЕрдкрдиреЗ рдШрдЯрдХ (рдХреБрдЫ рд╕рдВрдкрд╛рджрдХреАрдп рд╕рд╛рдордЧреНрд░реА) рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dangerouslySetInnerHtml рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдореИрдВ html рдкреНрд░реЛрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд░реЗрдлрд░реА рдЬрд╣рд╛рдВ рдореИрдВ рдХреБрдЫ рдЬрд╛рджреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ref.current.querySelectorAll рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдЕрдм рдореИрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ html рдореЗрдВ рдореЗрд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ useEffect рднрд▓реЗ рд╣реА рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рдпрдо рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╡рд┐рдЪрд╛рд░ рд╕рдВрдкрд╛рджрдХреАрдп рд╕рд╛рдордЧреНрд░реА рд╕реЗ рд╕рднреА рд▓рд┐рдВрдХ рдХреНрд▓рд┐рдХ рдХреЛ рд░реЛрдХрдирд╛ рдФрд░ рдХреБрдЫ рд╡рд┐рд╢реНрд▓реЗрд╖рдгреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдпрд╛ рдЕрдиреНрдп рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕рд╛рдорд╛рди рдХрд░рдирд╛ рд╣реИред

рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдШрдЯрдХ рд╕реЗ рдкрд╛рдиреА рдкрд┐рд▓рд╛рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
https://codesandbox.io/s/8njp0pm8v2

рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░реЗрдбрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП mapDispatchToProps рд╕реЗ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рдФрд░ рд╣реБрдХ рдореЗрдВ рдЙрд╕ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ exhaustive-deps рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓рддреА рд╣реИред

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

const onSubmit = React.useCallback(
  () => {
    props.onSubmit(emails);
  },
  [emails, props]
);

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓рд┐рдВрдЯ рдбрд┐рдкреЛ рдХреЛ [emails, props.onSubmit] рдареАрдХ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рдпрд╣ рд╣рдореЗрд╢рд╛ рдбрд┐рдкреЛ рдХреЛ [emails, props] рдореЗрдВ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

  1. рдПрдХ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдПрдХ рдиреНрдпреВрдирддрдо рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрднреА рднреА рдЖрдкрдХреЗ рдЗрд░рд╛рджреЗ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИ ("рдлреВ рдмрд╛рд░" рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдпреВрдЖрдИ рдкреИрдЯрд░реНрди рдЬрд┐рд╕реЗ рдЖрдк рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред

https://codesandbox.io/s/xpr69pllmz

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрджрдореЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдФрд░ рдЖрдк рд╕реНрдХреНрд░реАрди рдкрд░ рдХреНрдпрд╛ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдИрдореЗрд▓ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ рдФрд░ рдЙрди рдИрдореЗрд▓ рдХреЛ рдРрдк рдореЗрдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ред рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╢реЗрд╖ UI рдХреЛ рдХреЗрд╡рд▓ button рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВред

  1. рдЖрдкрдХреЗ рд╣реБрдХ/рдШрдЯрдХ рдХреЗ рдЗрдЪреНрдЫрд┐рдд API рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ред

рдореЗрд░реЗ рдШрдЯрдХ рдореЗрдВ рдПрдХ рдПрдХрд▓ рдкреНрд░реЛрдк рд╣реИ, onSubmit: (emails: string[]) => void ред рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлреЙрд░реНрдо рдЬрдорд╛ рдХрд░реЗрдЧрд╛ рддреЛ рдЗрд╕реЗ emails рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: https://github.com/facebook/react/issues/14920#issuecomment -467494468 рдореЗрдВ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЧрдпрд╛

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ props.foo() props рдХреЛ this рд╕реЗ foo рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рддреЛ foo рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ props рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рд╕рдВрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣рдореЗрд╢рд╛ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд╣реЛрддрд╛ рд╣реИред

рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕

рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддреГрддреАрдп рдкрдХреНрд╖ libs рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдорд╛рдЙрдВрдЯ рдФрд░ рдЕрдкрдбреЗрдЯ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрджреНрдпрддрди рдкреНрд░рднрд╛рд╡ рдХреЛ рдорд╛рдЙрдВрдЯ рд╡рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рд╕рд░рдгреА рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛рдХрд░), рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдкрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдирдорд╕реНрддреЗ,

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ:

const [client, setClient] = useState(0);

useEffect(() => {
    getClient().then(client => setClient(client));
  }, ['client']);

рдореБрдЭреЗ React Hook useEffect has a complex expression in the dependency array. Extract it to a separate variable so it can be statically checked

@joelmoss @sylvainbaronnet рдореИрдВ рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛

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

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЕрднреА рд▓рд╛рдЗрди 35 рдкрд░ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ setLastName рдХреЛ рд╕рд░рдгреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ?

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

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

@joelmoss рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛

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

@gaearon рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХреНрдпреЛрдВ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:

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

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред (рдФрд░ рдСрдл рдЯреЙрдкрд┐рдХ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ)

рдореИрдВ рдЬреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕рдХрд╛ рдХреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреИрдЯрд░реНрди рдореЗрд░реЗ рдЕрд╕рд▓реА рдХреЛрдб рдХреЗ рд╕рд╛рде 100% рд╕рдорд╛рди рд╣реИред

https://codesandbox.io/s/2x4q9rzwmp?fontsize=14

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

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рдм рдХреБрдЫ рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рд▓рд┐рдЯрд░ рдореБрджреНрджреЗ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред

  • рдЖрдкрдХреЗ рд╣реБрдХ/рдШрдЯрдХ рдХреЗ рдЗрдЪреНрдЫрд┐рдд API рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ред

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

рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛрдб рдкрд░ рдЗрд╕реЗ рдЪрд▓рд╛рддреЗ рд╕рдордп рдореБрдЭреЗ рд▓рд┐рдВрдЯрд░ рд╕реЗ рдпрд╣реА рдорд┐рд▓рддрд╛ рд╣реИ:

25:5   warning  React Hook useEffect has a missing dependency: 'fetchPodcastsFn'. Either include it or remove the dependency array  react-hooks/exhaustive-deps

рдореЗрд░рд╛ рдкреНрд░рд╢реНрди рд╣реИ: рдХреНрдпрд╛ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛ рддреЛ рд▓рд┐рдВрдЯрд░ рдирд┐рдпрдо, рдпрд╛ рд╣реБрдХ рд╕рд░рдгреА рдирд┐рдпрдо)? рдХреНрдпрд╛ рдЗрд╕ рдкреНрд░рднрд╛рд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ?

@svenanders , рдореИрдВ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдЖрдк fetchPodcastsFn рдХреНрдпреЛрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЗрд╕реЗ рд╣рд░ рд░реЗрдВрдбрд░ рдкрд░ рдмрджрд▓рддреЗ рд╣реИрдВ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдпрджрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИ)

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

https://codesandbox.io/s/4xym4yn9kx

  • рдХрджрдо

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреГрд╖реНрда рдкрд░ рдПрдХ рдорд╛рд░реНрдЧ рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕реБрдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреГрд╖реНрда рд╕реЗ рджреВрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред props.navigate рдХреЛ рд░рд╛рдЙрдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреЗрдЬ рд░реАрд▓реЛрдб рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП window.location.assign рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

  • рдЗрд░рд╛рджрд╛ рдПрдкреАрдЖрдИ

рдореИрдВ рдХреЛрдб рдЦрд┐рд▓реМрдиреЗ рдХреЗ рдбрд┐рдмреНрдмреЗ рдореЗрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд▓рд┐рдВрдЯрд░ рдореБрдЭреЗ рдмрддрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рд╕реВрдЪреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП props рдХреЗ рдмрдЬрд╛рдп props.navigate ред рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ?

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреНрд╡реАрдЯ! https://twitter.com/ferdaber/status/1098966716187582464

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдПрдХ рд╡реИрдз рдХрд╛рд░рдг рдпрд╣ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрджрд┐ navigate() рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдПрдХ рдмрд╛рдзреНрдп this рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдпрджрд┐ props рдЕрдВрджрд░ рдХреБрдЫ рднреА рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рд╕рд╛рдорд╛рди рдЕрдВрджрд░ this рднреА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред

рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕: https://codesandbox.io/s/711r1zmq50

рдЗрд░рд╛рджрд╛ рдПрдкреАрдЖрдИ:

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

рдХрджрдо:

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

IMO "рд╕рдм рдХреБрдЫ" рдЬреЛ рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП useDebounce Hook рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрдкрдпреЛрдЧреЛрдВ рдореЗрдВ (рдХрдо рд╕реЗ рдХрдо рд╣рдорд╛рд░реЗ рдореЗрдВ), delay рдкрд╣рд▓реЗ рд░реЗрдВрдбрд░ рдХреЗ рдмрд╛рдж рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╣рд░ рд░реА-рд░реЗрдВрдбрд░ рдкрд░ рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рддреЛ, рдпрд╣ рд╣реБрдХ рдореЗрдВ, рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реНрдХ useEffect рдмреЗрд╣рддрд░ рд╣реИ рд╣реЛрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП [value] рдХреЗ рдмрдЬрд╛рдп [value, delay] ред

рдХреГрдкрдпрд╛ рдпрд╣ рди рд╕реЛрдЪреЗрдВ рдХрд┐ рдЙрдерд▓реА рд╕рдорд╛рдирддрд╛ рдЬрд╛рдВрдЪ рдмреЗрд╣рдж рд╕рд╕реНрддреЗ рд╣реИрдВред рд░рдгрдиреАрддрд┐рдХ рд░реВрдк рд╕реЗ рд░рдЦреЗ рдЬрд╛рдиреЗ рдкрд░ рд╡реЗ рдЖрдкрдХреЗ рдРрдк рдХреА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╣рд░ рдПрдХ рдШрдЯрдХ рдХреЛ рд╢реБрджреНрдз рдмрдирд╛рдиреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХрд╛ рдРрдк рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЯреНрд░реЗрдбрдСрдлрд╝ред

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

рд╕рдореНрдореЗрд▓рди рджреНрд╡рд╛рд░рд╛ рдХрд╕реНрдЯрдо рд╣реБрдХ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдирд┐рдпрдо рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдлреАрдбрдмреИрдХ рд╣реИред

рдореИрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдирд╛рдо рд╕реЗ рдХрд╕реНрдЯрдо рд╣реБрдХ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдЧреЗрдХреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рдХреБрдЫ рдЗрд░рд╛рджрд╛ рд╣реИ:

https://github.com/facebook/react/blob/ba708fa79b3db6481b7886f9fdb6bb776d0c2fb9/packages/eslint-plugin-react-hooks/src/ExhaustiveDeps.js#L490 -L492

рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╕реНрдЯрдо рд╣реБрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪреЗрдЧреА? рдЗрд╕ рдкреНрд▓рдЧрдЗрди рджреНрд╡рд╛рд░рд╛ рд╣реБрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА use рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрдиреЗ рдХреА рдкрд░рдВрдкрд░рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рд╕рдореНрдореЗрд▓рди рдореИрдВ рдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╕реНрдЯрдо рд╣реБрдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░реВрдВрдЧрд╛, рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ рдХреБрдЫ WithDeps , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ рдкреВрд░реНрдг рдХрд╕реНрдЯрдо рд╣реБрдХ рдирд╛рдо рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ useCustomHookWithDeps ред WithDeps рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рдкреНрд▓рдЧрдЗрди рдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЕрдВрддрд┐рдо рд╕рд░рдгреА рддрд░реНрдХ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

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

рдпрд╣ рдХрд╕реНрдЯрдо рд╕рдорд╛рдирддрд╛ рдЬрд╛рдВрдЪ рдХреА рдЪреЗрддрд╛рд╡рдиреА рдФрд░ рд╕реНрд╡рддрдГ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред

const myEqualityCheck = a => a.includes('@');

useCallback(
  () => {
    // ...
  },
  [myEqualityCheck(a)]
);

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

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рдХрд╛рдЙрдВрдЯрд░ рд╣реИрдВ, рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдмрдЪреНрдЪреЗ:

  • рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмрдврд╝рд╛рдпрд╛ / рдШрдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдЬрдм рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХрд╛рдЙрдВрдЯрд░ рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдмрд╛рд▓ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд╢реВрдиреНрдп рдкрд░ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

  const [parent, setParent] = useState(0);
  const [child, setChild] = useState(0);

  useEffect(
    () => {
      setChild(0);
    },
    [parent] // "unnecessary dependency: 'parent'"
  );

рд╕рдВрдкреВрд░реНрдг-рдбрд┐рдкреНрд╕ рдирд┐рдпрдо рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ React Hook useEffect has an unnecessary dependency: 'parent'. Either exclude it or remove the dependency array.

screen shot 2019-02-25 at 11 06 40 am

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

  1. рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕: https://codesandbox.io/s/ol6r9plkv5
  2. рдЪрд░рдг: рдЬрдм parent рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ child рд╢реВрдиреНрдп рдкрд░ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  3. рдЗрд░рд╛рджрд╛: рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд▓рд┐рдВрдЯрд░ рдХреЛ рдпрд╣ рдкрд╣рдЪрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ parent useEffect рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред

[рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ]

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ

const [parent, setParent] = useState(0)
const [child, setChild] = useState(0)
const previousParent = useRef(parent)

useEffect(() => {
  if (parent !== previousParent.current) {
    setChild(0)
  }

  previousParent.current = parent
}, [parent])

рд▓реЗрдХрд┐рди рдореВрд▓ рдЕрдВрд╢ рдореЗрдВ рдПрдХ "рдХрд╡рд┐рддрд╛" рд╣реИ рдЬреЛ рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИред

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

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

useEffect(() => {
  if (props.invalidateCache) {
    cache.clear()
  }
}, [props.invalidateCache])

рдЕрдЧрд░ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдмреЗрдЭрд┐рдЭрдХ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдФрд░ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЕрд╡рд╣реЗрд▓рдирд╛ рдХрд░реЗрдВред

@рд╢реНрд░реА рд▓реАрдмреЛ
рд╡реНрд╣рд╛рдЯ рдЕрдмрд╛рдЙрдЯ

  const [parent, setParent] = useState(0);
  const [child, setChild] = useState(0);
  const updateChild = React.useCallback(() => setChild(0), [parent]);

  useEffect(
    () => {
      updateChild();
    },
    [updateChild] 
  );

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкрд╣рд▓реЗ getDerivedStateFromProps рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рдХреНрдпрд╛ рдореИрдВ getDerivedStateFromProps рдХреЛ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реВрдВ? рдорджрдж?

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

@ eps1lon рдЖрдкрдХреЗ рдкрд╛рд╕ useCallback рдкрд░ рдареАрдХ рд╡реИрд╕реА рд╣реА рдЪреЗрддрд╛рд╡рдиреА рд╣реЛрдЧреА, рдФрд░ рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрд╕ рдкреИрдЯрд░реНрди рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВ рдЬреЛ рдореВрд▓ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╖рдп рдХреЛ рдкрдЯрд░реА рд╕реЗ рдирд╣реАрдВ рдЙрддрд╛рд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рдпрдо рдХреЛ useEffect рдпрд╛ useLayoutEffect рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╢рд┐рдерд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рдкреНрд░рднрд╛рд╡реА рддрд░реНрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирд┐рдпрдо useCallback рд▓рд┐рдП рдмрдирд╛ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, useMemo , рдЖрджрд┐ред

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

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

https://codesandbox.io/s/5v9w81j244

рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ useEffect рд╣реБрдХ рдХреЛ useDelayedItems рджреЗрдЦрддрд╛ рд╣реВрдВред рдЕрднреА рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА рдореЗрдВ items рд╕рдВрдкрддреНрддрд┐ рд╕рд╣рд┐рдд рдПрдХ рд▓рд╛рдЗрдирд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рд╕рд░рдгреА рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рд╡рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

useDelayedItems рд╣реБрдХ рдХрд╛ рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдЖрдЗрдЯрдореЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдФрд░ рдПрдХ рдХреЙрдиреНрдлрд┐рдЧ рдСрдмреНрдЬреЗрдХреНрдЯ (рдПрдордПрд╕ рдореЗрдВ рджреЗрд░реА, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреГрд╖реНрда рдЖрдХрд╛рд░) рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рд╢реБрд░реВ рдореЗрдВ рдореЗрд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдЗрдЯрдореНрд╕ рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред config.delay рдмреАрдд рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдЗрдЯрдо рдЕрдм рдЖрдЗрдЯрдо рдХрд╛ рдкреВрд░рд╛ рд╕реЗрдЯ рд╣реЛрдЧрд╛ред рдЬрдм рдЗрд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕реЗрдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣реБрдХ рдХреЛ рдЗрд╕ "рджреЗрд░реА" рддрд░реНрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдмрдбрд╝реА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдХрдЪреНрдЪрд╛ рдФрд░ рдЧреВрдВрдЧрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред

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

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

рдПрдХ рдПрдХрд▓ рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рдЕрдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ?

рдЙрджрд╛рд╣рд░рдг: fullName firstName рдФрд░ lastName ред рд╣рдо рдкреНрд░рднрд╛рд╡ рдХреЛ рддрднреА рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдм fullName рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "рд╕рд╣реЗрдЬреЗрдВ" рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИ) рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдорд╛рдиреЛрдВ рддрдХ рднреА рдкрд╣реБрдВрдЪ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рдбреЗрдореЛ

рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ firstName рдпрд╛ lastName рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЪреАрдЬреЗрдВ рдЯреВрдЯ рдЬрд╛рдПрдВрдЧреА рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ fullName рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рднрд╛рд╡ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@awery рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ useEffect рдкреНрд░реЛрдк рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрдХреЗрдд рд╕реЗ рдХреНрдпрд╛ рдореВрд▓реНрдп рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ onClick рдЙрд╕ "рдкреНрд░рднрд╛рд╡" рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

https://codesandbox.io/s/0m4p3klpyw

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдПрдХрд▓ рдорд╛рди рдЬреЛ рдЕрдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, useMemo рд╢рд╛рдпрдж рд╡рд╣реА рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЧрдгрдирд╛ рдХреА рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рдХреГрддрд┐ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдареАрдХ 1:1 рдХреЛ рдореИрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рд▓рд┐рдВрдХ рдмрдирд╛рдКрдВрдЧрд╛ рдФрд░ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реВрдВрдЧрд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рдирд┐рдпрдо рд╣реИ: рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдЯреИрдм рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ:
https://codesandbox.io/s/m4nzvryrxj

useEffect(() => {
    window.scrollTo(0, 0);
  }, [activeTab]);

рдФрд░ рдореБрдЭреЗ React Hook useEffect has an unnecessary dependency: 'activeTab'. Either exclude it or remove the dependency array

рд╕рд╛рде рд╣реА, рдЬрдм рдореИрдВ рдХреБрдЫ рдШрдЯрдХреЛрдВ рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореИрдВ рдШрдЯрдХрдбрд┐рдбрдорд╛рдЙрдВрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

useEffect(() => {
    ...
  }, []);

рдпрд╣ рдирд┐рдпрдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрдбрд╝реА рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ useEffect рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдирдпрд╛ рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣:
https://codesandbox.io/s/nr7wz8qp7l

const foo = () => {...};
useEffect(() => {
    foo();
  }, []);

рдЖрдкрдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ: React Hook useEffect has a missing dependency: 'foo'. Either include it or remove the dependency array
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╕реВрдЪреА рдореЗрдВ foo рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВред рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдореЗрдВ рдлреВ рдПрдХ рдирдпрд╛ рдлрдВрдХреНрд╢рди рд╣реИ рдФрд░ рдпреВрдЬрдЗрдлреЗрдХреНрдЯ рд╣рдореЗрд╢рд╛ рдЪрд▓рддрд╛ рд░рд╣реЗрдЧрд╛?

@ ksaldana1 рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЕрдВрджрд░ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдбрд╛рд▓рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдЗрд╕рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрджреНрдпрддрди рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдЖрдкрдХреА рдЗрдЪреНрдЫрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ useReducer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрдбреЗрдЯ рдХреА рдЧрдИ рд╕реНрдерд┐рддрд┐ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЕрдВрджрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧреАред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдПрдХрд▓ рдорд╛рди рдЬреЛ рдЕрдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, useMemo рд╢рд╛рдпрдж рд╡рд╣реА рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдпрджрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг useMemo рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ useMemo fullName рд╣рд░ рдмрд╛рд░ firstName рдпрд╛ lastName рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдирдпрд╛ fullName рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ fullName рддрдм рддрдХ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рдЬрдм рддрдХ рд╕реЗрд╡ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@awery рдХреНрдпрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛? https://codesandbox.io/s/lxjm02j50m
рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреНрдпрд╛ рд╣реИред

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

рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЯреНрд░рд┐рдЧрд░рд┐рдВрдЧ рдФрд░ рдкреНрд░рднрд╛рд╡:

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

рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ useReducer рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

рдЕрджреНрдпрддрди рд╕реНрдерд┐рддрд┐ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧреАред

рдзрдиреНрдпрд╡рд╛рдж!

@bugzpodder рдЕрд╕рдВрдмрдВрдзрд┐рдд рдХреА рддрд░рд╣ рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХ рдХреЙрд▓ рдХреЗ рдЕрдВрджрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП useLayoutEffect рдХреЗ рдмрдЬрд╛рдп useEffect ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирдП рдорд╛рд░реНрдЧ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ рд╣реИ

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ:

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

рд▓рдШреБ рд╕рдВрд╕реНрдХрд░рдг:

useEffect(function() {
  props.setLoading(true)
}, [props.setLoading])

// тЪая╕П React Hook useEffect has a missing dependency: 'props'.

рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг: рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕

рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ... рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рдЖрд╕рд╛рди;)

рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ, рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣реАрдВ рд╕реЗ рднреА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рдФрд░ рдПрдХ рд╣реБрдХ рдХреЗ рдЕрдВрджрд░ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ exhaustive-deps рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓рддреА рд╣реИред

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

-> рд╕реИрдВрдбрдмреЙрдХреНрд╕

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдмрд╕ @siddharthkp рдХреЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рдлреЛрд░реНрдХ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред

рдзрдиреНрдпрд╡рд╛рджред

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

рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ; рдлрд╝рдВрдХреНрд╢рди рд╣рд░ рд╕рдордп рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдорд╛рддрд╛-рдкрд┐рддрд╛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред

@рд╕рд┐рджреНрдзрд╛рд░реНрдердХрдк

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

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ props.foo() props рдХреЛ this рд╕реЗ foo рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рддреЛ foo рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ props рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рд╕рдВрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣рдореЗрд╢рд╛ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд╣реЛрддрд╛ рд╣реИред

рдлрд╝рдВрдХреНрд╢рди рд╣рд░ рд╕рдордп рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдорд╛рддрд╛-рдкрд┐рддрд╛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред

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

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

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

thx @gaearon

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ props.foo() props рдХреЛ this рд╕реЗ foo рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рддреЛ foo рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ props рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рд╕рдВрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣рдореЗрд╢рд╛ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд╣реЛрддрд╛ рд╣реИред

рд╡рд╣реА рдореЗрд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рднреА рджреЗрддрд╛ рд╣реИред рд╢реБрдХреНрд░рд┐рдпрд╛! рдореИрдВ

https://codesandbox.io/s/98z62jkyro

рддреЛ рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдЧрдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдЗрдирдкреБрдЯ рдкрдВрдЬреАрдХреГрдд рдХрд░рдХреЗ рдЗрдирдкреБрдЯ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ useRegister рдирд╛рдордХ рдПрдХ рдХрд╕реНрдЯрдо рд╣реБрдХ рдмрдирд╛рдпрд╛ рд╣реИред

рднреВрддрдкреВрд░реНрд╡:

 useEffect(
    () => {
      register(props.name, props.rules || []);
      console.log("register");
      return function cleanup() {
        console.log("cleanup");
        unregister(props.name);
      };
    },
    [props.name, props.rules, register, unregister]
  );

рдЬрдм рдкреНрд░реЙрдкреНрд╕.рд░реВрд▓реНрд╕ рдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдирдВрдд рд░реЗрдВрдбрд░-рд▓реВрдк рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред Props.rules рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рдгрд┐рдпрд╛рдБ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╕рдордп рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рд╣реИред рдореЗрд░реЗ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрдВрд╕реЛрд▓ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдХрд░рддрд╛ рд╣реИред

рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗрд╡рд▓ props.name рд╣реЛрдиреЗ рд╕реЗ рдпрд╣ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп рдиреЗ рдмрддрд╛рдпрд╛, рдЖрд╡реЗрджрди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдЖрдПрдЧрд╛, рдФрд░ рдЗрд╕ рдЕрд╡рд╕рд░ рдкрд░ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдЧрдВрднреАрд░ рд╣реИрдВред

@bugzpodder

рдкреБрди: https://github.com/facebook/react/issues/14920#issuecomment -467212561

useEffect(() => {
    window.scrollTo(0, 0);
  }, [activeTab]);

рдпрд╣ рдПрдХ рдХрд╛рдиреВрдиреА рдорд╛рдорд▓рд╛ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рдбреАрдк рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рдореЗрдВ рдвреАрд▓ рджреЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред (рд▓реЗрдХрд┐рди useMemo рдпрд╛ useCallback ред)

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

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЖрдкрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЙрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдЦреЛ рджрд┐рдпрд╛ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдУрдкреА рдкреЛрд╕реНрдЯ рдПрдХ рдареЛрд╕ рдпреВрдЖрдИ рдЙрджрд╛рд╣рд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ

рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рдЖрдк useEffect рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдирдпрд╛ рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣: https://codesandbox.io/s/nr7wz8qp7l

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

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдирдП рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рд╣реИ, рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕реЗ exhaustive-deps рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдзрд╛рд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ...

import React from 'react'
import emitter from './thing'

export const Foo = () => {
  const onChange = () => {
    console.log('Thing changed')
  }

  React.useEffect(() => {
    emitter.on('change', onChange)
    return () => emitter.off('change', onChange)
  }, [onChange])

  return <div>Whatever</div>
}

рдХреНрдпреЛрдВрдХрд┐ onChange рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, useEffect рд╣реБрдХ [onChange] рддрд░реНрдХ рдмреЗрдорд╛рдиреА рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛рдпрд╛ рднреА рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

   React.useEffect(() => {
     emitter.on('change', onChange)
     return () => emitter.off('change', onChange)
-  }, [onChange])
+  })

рд▓рд┐рдВрдЯрд░ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рд╕рд░рдгреА рддрд░реНрдХ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддрд╛ рд╣реИред

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

рдЗрд╕ рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрдзрд╛рд░реЛрдВ рдФрд░ рдмреЗрд╣рддрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЕрднреА-рдЕрднреА [email protected] рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИред рдХреБрдЫ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЕрдЧрд▓реЗ рд╣рдлреНрддреЗ рдмрд╛рдХреА рдХреЛ рджреЗрдЦ рд▓реВрдВрдЧрд╛ред

рдореИрдВрдиреЗ рдпрд╣рд╛рдВ "рд╕реБрд░рдХреНрд╖рд┐рдд" рдлрд╝рдВрдХреНрд╢рди рдбрд┐рдкреНрд╕ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рд╕рдВрднрд╛рд╡рд┐рдд рдЪрд░рдг рднреА рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ: https://github.com/facebook/react/pull/14996ред (рдкрд░реАрдХреНрд╖рдг рджреЗрдЦреЗрдВред) рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧреА рдЕрдиреБрдорд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд╣реА рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░рдирд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдкреАрдЖрд░ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВред

@gaearon рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдмреЗрд╣рддрд░ рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ ЁЯЩП

@gaearon рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреНрд░реЛрдк рд╕реЗ рдЖрддреА рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

image

рдЬрд┐рд╕рдореЗрдВ setScrollTop рдПрдХ redux рдХреНрд░рд┐рдпрд╛ рд╣реИред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ Slider рдШрдЯрдХ рдореЗрдВ, рдореИрдВ рдбреЛрдо рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП useEffect рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдореИрдВ noUiSlider рдШрдЯрдХ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░ рд╕рдХреВрдВред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП [sliderElement] рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рднрд╛рд╡ рдЪрд▓рдиреЗ рдкрд░ рдбреАрдУрдПрдо рдореЗрдВ рд░реЗрдлрд░реА рдЙрдкрд▓рдмреНрдз рд╣реИред рд╣рдо рд╕рд░реНрд╡рд░ рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдХреЛ рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбреАрдУрдПрдо рдкреНрд░рддрд┐рдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЕрдиреНрдп рдкреНрд░реЙрдкреНрд╕ рдЬреЛ рдореИрдВ useEffect (рдпрд╛рдиреА рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо, рдСрдирдЕрдкрдбреЗрдЯ, рдЖрджрд┐) рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд╡реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрдирдХреЗ рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рджрд┐рдЦрддреА рд╣реИред

screen shot 2019-03-02 at 5 17 09 pm


рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рдкреНрд░рднрд╛рд╡ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

const { min, max, step } = props;
const sliderElement = useRef();

useEffect(() => {
  if (!sliderElement.current) {
    return;
  }

  const slider = sliderElement.current;
  noUiSlider.create(slider, {
    connect: true,
    start: [min, max],
    step,
    range: {
      min: [min],
      max: [max],
    },
  });

  if (props.onUpdate) {
    slider.noUiSlider.on('update', props.onUpdate);
  }

  if (props.onChange) {
    slider.noUiSlider.on('change', props.onChange);
  }
}, [sliderElement]);

@ WebDeg-Brian рдореИрдВ рдкреВрд░реНрдг рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдбреЗрдореЛ рдХреЗ рдмрд┐рдирд╛ рдЖрдкрдХреА рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдорд╛рдлрд╝ рдХрд░рдирд╛ред рд╢реАрд░реНрд╖ рдкреЛрд╕реНрдЯ рджреЗрдЦреЗрдВред

рдореИрдВрдиреЗ рд╕рд╛рдорд╛рдиреНрдп "рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрднреА рдирд╣реАрдВ рдмрджрд▓рддреЗ" рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛:

https://overreacted.io/how-are-function-components-different-from-classes/

рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред

рд╣рд╛рдп @gaearon , рдпрд╣рд╛рдВ рд╡рд╣ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдореБрдЭреЗ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдерд╛ (рдЯреНрд╡реАрдЯрд░ рд╕реЗ) :)

рдореВрд▓ рд░реВрдк рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЬрд╛рд▓ рдХреЛ рд╣реБрдХ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдпрд╣ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЗ рдмрд╛рд╣рд░/рдЕрдВрджрд░ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдЬрд╛рд▓ рд╣реИред

рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ useEffect рд░рд╛рдЬреНрдп рдореВрд▓реНрдп ( trapped ) рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИ , рддреЛ рдпрд╣ рдХрднреА-рдХрднреА рдкреБрд░рд╛рдирд╛ рд╣реЛрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдФрд░ рд▓реЙрдЧ рд▓рд┐рдЦреЗред useTrap.js рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦреЗрдВ, рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдФрд░ рд▓реЙрдЧ useEffect рдФрд░ preventDefaultHelper рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реИрдВред

рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рдорд╛рди useEffect рдЕрдВрджрд░ рдирд╣реАрдВ рд╣реИ рддреЛ рдпрд╣ рдЙрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ)ред

  1. рдПрдХ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕
  2. рдХрджрдо:
    рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рд╕рдХреНрд░рд┐рдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЙрдХреНрд╕ рдХреЗ рдЕрдВрджрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджрд╛рдПрдВ рдорд╛рдЙрд╕ рдмрдЯрди рдХреЗ рд╕рд╛рде рднреА рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╣рд▓реЗ рдХреНрд▓рд┐рдХ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ( e.preventDefault )
    рдЬрдм рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ "рдкрд╣рд▓рд╛ рдХреНрд▓рд┐рдХ" рдореЗрд░рд╛ рдорддрд▓рдм рд░рд╛рдЬреНрдп рдХреЛ рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдХреНрд▓рд┐рдХ рд╣реИред
    рдПрдХ рд╕рдХреНрд░рд┐рдп рдмреЙрдХреНрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ рд░рд╛рдЬреНрдп рдХреЛ "рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ" рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ рдФрд░ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ред рдмрд╛рд╣рд░ рдПрдХ рдФрд░ рдХреНрд▓рд┐рдХ рд░рд╛рдЬреНрдп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдкреНрд░рдХрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рд╣рд╛рдп @gaearon , рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдореБрдЭреЗ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рд╕реБрдЭрд╛рдпрд╛ рдерд╛, рдореИрдВ рдпрд╣рд╛рдВ рдЕрдкрдирд╛ рдХрд╕реНрдЯрдо рд╣реБрдХ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ! рдореИрдВ рд╕рд╣реА рдЖрдХрд╛рд░ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝рддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рд╣реИ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рдпрд╣ рдЗрд╕рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╣реИ: рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-async-utils/src/hooks/useAsyncData.ts

рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЕрд╡рд▓реЛрдХрди
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрд╕рд┐рдВрдХ рдХреЙрд▓, рдкрд░рд┐рдгрд╛рдореА рдбреЗрдЯрд╛ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ред

triggerAsyncData рдЕрдкрдбреЗрдЯ asyncData рд░рд╛рдЬреНрдп рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ getData рд╕рдорд╛рд░реЛрд╣ рд╣реИ рдХрд┐ рд░рд┐рдЯрд░реНрди рдПрдХ Promise ред triggerAsyncData рдХреЛ рд╣реБрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рднрд╛рд╡ рдпрд╛ "рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ" рджреЛрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЪреБрдиреМрддрд┐рдпреЛрдВ

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

    1. рдмрд╕ рдЗрд╕реЗ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ => рд▓реЗрдХрд┐рди рдлрд┐рд░ рдкреНрд░рднрд╛рд╡ рд╣рд░ рд░реЗрдВрдбрд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред

    2. рдЗрд╕реЗ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рд▓реЗрдХрд┐рди useMemo / useCallback рд╕рд╛рде triggerAsyncData => useMemo / useCallback рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП AFAIKред

    3. рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡ рдХреЗ рдЕрдВрджрд░ рджрд╛рдпрд░ рдХрд░реЗрдВ => рддрдм рдореИрдВ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

    4. рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ triggerAsyncData рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ triggerAsyncData рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ => рдЕрдм рддрдХ рдореБрдЭреЗ рдорд┐рд▓рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдкред рд▓реЗрдХрд┐рди рдпрд╣ "рд╕рдВрдкреВрд░реНрдг-рдбрд┐рдкреНрд╕" рдирд┐рдпрдо рддреЛрдбрд╝рддрд╛ рд╣реИред

  2. рдХрд╕реНрдЯрдо рд╣реБрдХ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдорд╛рд░реЗ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рднрд╛рд╡ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ / рдмрди рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рд╢рд╛рдмреНрджрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЕрдХреНрд╕рд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВред

    1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдЫреЛрдбрд╝ рджреЗрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд╡реЗ useMemo / useCallback рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдЪрд┐рдд рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ => рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдбрд░ рд╣реИ рдХрд┐ рд╡реЗ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдЕрдЧрд░ рд╡реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХрд╛рдлреА рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИред

    2. рдХрд╕реНрдЯрдо рд╣реБрдХ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреЗ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ, рдФрд░ рд╕реНрд╡рдпрдВ рдЗрдирдкреБрдЯ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ => рдХреВрд▓, рдХрдо рд╡рд░реНрдмреЛрдЬрд╝, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдгред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдпрд╣ "рд╕рдВрдкреВрд░реНрдг-рдбрд┐рдкреНрд╕" рдирд┐рдпрдо рддреЛрдбрд╝рддрд╛ рд╣реИред (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдпрд╣ рд╣реВрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдирд┐рдпрдорд┐рдд рдбрд┐рдкреЛ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдпрд╣ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкреИрдЯрд░реНрди рд▓рдЧрддрд╛ рд╣реИ)ред

  3. рдХрд╕реНрдЯрдо рд╣реБрдХ рдХреЗ рд▓рд┐рдП рдЦрд░рд╛рдм рдкреНрд░рдмрдВрдзрд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рднрд╛рд╡ рдХреЗ рдХрд╛рд░рдг рдПрдХ рдЕрдирдВрдд рдПрд╕рд┐рдВрдХ рд▓реВрдк рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд░рдХреНрд╖рд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ "рдирдХрд▓реА" рдЬреЛрдбрд╝рддрд╛ рд╣реИ? рдирд┐рд░реНрднрд░рддрд╛ ( asyncData )ред рдпрд╣ рдлрд┐рд░ рд╕реЗ "рд╕рдВрдкреВрд░реНрдг-рдбрд┐рдкреНрд╕" рдирд┐рдпрдо рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред

рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреА рд╡реНрдпрд╛рдЦреНрдпрд╛ ... рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реБрдХ рдХрд╛ рдЙрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдореЗрд░реЗ рд╕рдВрдШрд░реНрд╖ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рдФрд░ рд╣реИ рдЬреЛ рдореИрдВ рдЗрди рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдпрд╣рд╛рдБ рд╕рднреА рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдЕрд░реЗ @gaearon рдЖрдкрдХреА рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

  1. рдПрдХ рдиреНрдпреВрдирддрдо рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдЙрджрд╛рд╣рд░рдгред

  2. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЬреЗрд╕рди рдПрдкреАрдЖрдИ рд╕реЗ рдкреНрд░рд╛рдкреНрдд 5 рд▓реЛрд░реЗрдо рдЗрдкреНрд╕рдо рд╢реАрд░реНрд╖рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред

  3. рдореИрдВрдиреЗ рдЗрдЪреНрдЫрд┐рдд рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╣реБрдХ рдмрдирд╛рдпрд╛ рд╣реИ:

const { data, isLoading, isError } = useDataApi('https://jsonplaceholder.typicode.com/posts')

рдХрд╕реНрдЯрдо useDataApi рд╣реБрдХ рдХреЗ рдЖрдВрддрд░рд┐рдХ рднрд╛рдЧ:

...
  const fetchData = async () => {
    let response;
    setIsError(false);
    setIsLoading(true);

    try {
      response = await fetch(url).then(response => response.json());

      setData(response);
    } catch (error) {
      setIsError(true);
    }

    setIsLoading(false);
  };

  useEffect(
    () => {
      fetchData();
    },
    [url]
  );
...

рдпрд╣ рдХреЛрдб рд╣реЛрдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛

  useEffect(
    () => {
      fetchData();
    },
    [url]
  );

рдЬрд╣рд╛рдВ react-hooks/exhaustive-deps рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА рдореЗрдВ fetchData рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ url рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рд╣реБрдХ рдХреЛ . рдореЗрдВ рдмрджрд▓ рджреВрдВ

  useEffect(
    () => {
      fetchData();
    },
    [fetchData]
  );

рддреЛ рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рдлрд╛рдпрд░рд┐рдВрдЧ рдЕрдиреБрд░реЛрдз рд╣реИ рдФрд░ рдХрднреА рдирд╣реАрдВ рд░реБрдХ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдХреЛрдб рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реИ рдпрд╛ react-hooks/exhaustive-deps рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдлрд╛рдпрд░рд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреАред рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рдкреАрдПрд╕ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдкрдврд╝реА рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ , рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ Data fetching, setting up a subscription, and manually changing the DOM in React components are all examples of side effects рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рдпрд╛ рдХрд┐ рдбреЗрдЯрд╛ useEffect рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рддреЛ рдЕрдм рдореИрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдБ

@ jan-stehlik рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧ рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде fetchData рд▓рдкреЗрдЯрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рдлреЛрд░реНрдХ рдХрд┐рдпрд╛ рд╣реИ https://codesandbox.io/s/pjmjxprp0m

рдмрд╣реБрдд рдорджрджрдЧрд╛рд░, рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @viankakrisna !

рдореЗрд░реЗ рдЬреНрдЮрд╛рди рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рдорд╛рди рдЙрдкрдпреЛрдЧ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рд╣реИ рддреЛ рдпрд╣ рдЙрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕рд╣реА рдХрд░реЗрдВ)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреБрдо рдпрд╣рд╛рдБ рдЧрд▓рдд рд╣реЛред рдпрд╛ рдпреЛрдВ рдХрд╣реЗрдВ, рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рддред рдЖрдк рдЕрдкрдиреЗ рдкреНрд░рднрд╛рд╡ рдХреЗ рдЕрдВрджрд░ handleEvent рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ред рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдкрдврд╝реЗ рдЧрдП рдореВрд▓реНрдп рдмрд╛рд╕реА рд╣реИрдВред

рджрд┐рд▓рдЪрд╕реНрдкред

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

рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ: _"рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ"_?
рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡ рдХреЗ рдиреАрдЪреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЕрдиреНрдп рд╕рднреА рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рдорд╛рди)ред

рдпрд╛ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣реИрдВрдбрд▓рд░ рд░рд╛рдЬреНрдп рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдкреНрд░рднрд╛рд╡ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рднрд╛рд╡ рдЙрд╕ рд░рд╛рдЬреНрдп рдореВрд▓реНрдп рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ?

рдпрд╛ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣реИрдВрдбрд▓рд░ рд░рд╛рдЬреНрдп рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдкреНрд░рднрд╛рд╡ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рднрд╛рд╡ рдЙрд╕ рд░рд╛рдЬреНрдп рдореВрд▓реНрдп рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ?

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

рдареАрдХ рд╣реИ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЦрдмрд░ рд╣реИ! рдЗрд╕ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @gaearon :)
рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП (рдФрд░ рдЕрдиреНрдп?) рд╕реБрдкрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛ ...

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

рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдкрд░ рдирд╣реАрдВ рджреЗрдЦрд╛ред
рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ _рдиреЛрдЯ_ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдареАрдХ рд╣реИ?

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рдПрдХ рдФрд░ рдмрд╛рдд, рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреЗ рд▓рд┐рдП deps рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ useCallback рдЬрдм рдпрд╣ рд▓рдкреЗрдЯрддрд╛ handleEvent (рдпрд╛ рдХрд┐ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рд╣реИрдВрдбрд▓рд░)ред рдХреНрдпрд╛ рдпрд╣ event рдпрд╣ рд╕реНрд╡рдпрдВ рд╣реИ?

рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдкрд░ рдирд╣реАрдВ рджреЗрдЦрд╛ред

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

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

рдкрдХреНрдХрд╛ рдирд╣реАрдВ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдпрд╣ рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдХреЛрдИ рднреА рдорд╛рди рд╣реИред рдЬреИрд╕реЗ useEffect ред

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

useCallback , рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛:

const memoHandleEvent = useCallback(
    handleEvent
);

рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ memoHandleEvent рдХреЛ useEffect рд╕рд╛рде-рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ handleEvent рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ addEventListener рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдЙрдЪрд┐рдд рдФрд░ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИред

рдиреЛрдЯ useCallback рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдлрд┐рд░ рд╕реЗ, рдПрдХ рдкреВрд░реНрдг рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдзреВрд░реЗ рд╡рд┐рд╡рд░рдг рд╕реЗ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ рдХрд┐ рдЖрдкрдХрд╛ рд╕реБрдзрд╛рд░ рд╕рд╣реА рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдиреЛрдЯ рдЙрдкрдпреЛрдЧ рдХреЙрд▓рдмреИрдХ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЖрд░реНрдЧ! : рдореБрд╕реНрдХрд░рд╛рд╣рдЯ: рд▓реЛрд▓

рдлрд┐рд░ рд╕реЗ, рдПрдХ рдкреВрд░реНрдг рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдзреВрд░реЗ рд╡рд┐рд╡рд░рдг рд╕реЗ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ рдХрд┐ рдЖрдкрдХрд╛ рд╕реБрдзрд╛рд░ рд╕рд╣реА рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдУрд╣, рдпрд╣ рдКрдкрд░ рд╕реЗ рд╡рд╣реА рд▓рд┐рдВрдХ рд╣реИред рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ :)

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

рдЕрд░реЗ! рдорд╛рдлрд╝ рдХрд░рдирд╛! :PI рдореЗрд░реЗ рдЦрд╛рддреЗ рдкрд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд╛рд░ рдХрд░ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдХреБрдЫ рд╣рдЯрд╛рдиреЗ рджреЛ рдФрд░ рдореИрдВ рдПрдХ рдФрд░ рдмрдирд╛рдКрдВрдЧрд╛ (рдФрд░ рдореВрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреВрдВрдЧрд╛)ред

@gaearon useCallback рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рдХреА рдпрд╣ рджреВрд╕рд░реА рдХрдбрд╝реА рд╣реИ

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд┐рдВрдЯрд░ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИред рдореЗрд░рд╛ рдирдореВрдирд╛:

рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕

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

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

componentDidUpdate (prevProps) { const { getData, someId, refreshRequest} = this.props; if (prevProps.refreshRequest!== this.props.refreshRequest) { getData(someId); } }

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

рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реБрдХ рдЙрдкрдпреЛрдЧ рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдЧрд╛рдпрдм рд╣реИрдВ: 'getData' рдФрд░ 'someId'ред рдпрд╛ рддреЛ рдЙрдиреНрд╣реЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдпрд╛ рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА рдХреЛ рд╣рдЯрд╛ рджреЗрдВ

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

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЕрдЧрд░ рдХреБрдЫ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ, рддреЛ рдореБрдЭреЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рд╢реБрдХреНрд░рд┐рдпрд╛!

рдореИрдВрдиреЗ рдЕрднреА [email protected] рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирдВрдЧреЗ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдорд░реНрдерди рд╣реИ (рдЬреЛ useCallback рдмрд┐рдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ)ред рдпрд╣рд╛рдВ рдПрдХ рдЬреАрдЖрдИрдПрдл рд╣реИ:

demo

рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЖрдЬрд╝рдорд╛ рд╕рдХреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ! (рдХреГрдкрдпрд╛ https://github.com/facebook/react/pull/15026 рдореЗрдВ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╡рд╛рд╣ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВред)

рдореИрдВ рдХрд▓ рдЗрд╕ рдзрд╛рдЧреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред

рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЙрддреНрдерд╛рдкрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ "рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг" рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдореМрдХреЗ рдкрд░ рд▓реЗрдХрд░ рдЖрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ return рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╣рд░рд╛рдП рдЧрдП рдШреЛрд╖рдгрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

function Component() {
  useEffect(() => {
    handleChange
  }, [handleChange])

  return null

  function handleChange() {}
}

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

const useAsyncEffect = (fn, ...args) => {
    /* eslint-disable react-hooks/exhaustive-deps */
    useEffect(() => {
        fn();
    }, ...args);
};

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдореИрдВрдиреЗ рдЕрднреА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдирд┐рдпрдо рдХреЗ additionalHooks рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИред

рдирдорд╕реНрддреЗ,
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ https://codesandbox.io/s/znnmwxol7l

рдореИрдВ рдЬреЛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рдиреАрдЪреЗ рд╣реИ:

function App() {
  const [currentTime, setCurrentTime] = React.useState(moment());

  const currentMonth = React.useMemo(
    () => {
      console.log("RUN");
      return currentTime.format("MMMM");
    },
    [currentTime.format("MMMM")] // <= this proplem [currentTime]
  );

  return (
    <div className="App">
      <h1>Current month: {currentMonth}</h1>
      <div>
        <button
          onClick={() => setCurrentTime(currentTime.clone().add(1, "days"))}
        >
          + 1 day
        </button>
      </div>
      <div>{currentTime.toString()}</div>
    </div>
  );
}

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣реА рдорд┐рд▓рддрд╛ рд╣реИ:

  const currentMonth = React.useMemo(
    () => {
      console.log("RUN");
      return currentTime.format("MMMM");
    },
    [currentTime] // <= this proplem
  );

рдХрднреА рднреА currentTime рдкрд░рд┐рд╡рд░реНрддрди рдлрд┐рд░ currentMonth рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░реЗрдВ

рдпрд╛ рдХрд┐рд╕реА рддрд░рд╣ рдореИрдВ рдЗрд╕реЗ рдиреАрдЪреЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

  const currentMonth = React.useMemo(
    () => {
      return currentTime.format("MMMM");
    },
    [myEqualityCheck(currentTime)]
  );

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдкрд╣рд▓реЗ рд╣реА рджрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдКрдкрд░ рдХреЗ рдзрд╛рдЧреЗ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрд╛:
рдХреЗрд╡рд▓ рдорд╛рдЙрдВрдЯ рдкрд░ useEffect рд╣реБрдХ рдЪрд▓рд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдПрдХ рдЦрд╛рд▓реА рдЗрдирдкреБрдЯ рд╕рд░рдгреА рдХреЛ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рдХрд░рддреЗ рд╕рдордп рдЙрди рдЗрдирдкреБрдЯ рддрд░реНрдХреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдкреВрд░реНрдг-рдбрд┐рдкреНрд╕ рд╢рд┐рдХрд╛рдпрддреЗрдВ, рдЬреЛ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЕрджреНрдпрддрди рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдмрджрд▓ рджреЗрдВрдЧреАред
рдХреЗрд╡рд▓ рд╡рд┐рд╕реНрддреГрдд-рдбрд┐рдкреНрд╕ рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде рдорд╛рдЙрдВрдЯ рдкрд░ useEffect рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреНрдпрд╛ рд╣реИ?

@einarq рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдСрди-рдорд╛рдЙрдВрдЯ useEffect рдореЗрдВ рд╕рднреА рд╕рдВрджрд░реНрднрд┐рдд рдорд╛рди рдХрднреА рдирд╣реАрдВ рдмрджрд▓реЗрдВрдЧреЗред рдпрд╣ useMemo рдЬреИрд╕реЗ рдЕрдиреНрдп рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж рднрд▓реЗ рд╣реА рдпрд╣ ESlint рдирд┐рдпрдо рд╕рднреА рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╕рд░рдгреА (рдСрдЯреЛрдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде) рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдХреЛрдб рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@einarq рдЬреИрд╕рд╛ рдХрд┐ рдзрд╛рдЧреЗ рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЗ рдмрд┐рдирд╛ рдЖрдкрдХреА рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдХреНрдпреЛрдВрдХрд┐ рдЙрддреНрддрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рдХреЛрдб рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

@nghiepit рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ currentTime.format("MMMM") рддреЛ useMemo рдЖрдкрдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕рдХреА рдЧрдгрдирд╛ рдкрд╣рд▓реЗ рд╣реА рдХрд░ рд▓реА рд╣реИ ред рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдЧрдгрдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рддрд░реНрдХ рд╕реВрдЪрдХрд╛рдВрдХ additionalHooks рд╡рд┐рдХрд▓реНрдк рдкрд░ рдХреЙрд▓рдмреИрдХ рд╣реИ? рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЕрднреА рдХреЛрдб рдореЗрдВ рдорд╛рди рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрд╣рд▓рд╛ рд╣реЛрдЧрд╛ https://github.com/facebook/react/blob/9b7e1d1389e080d19e71680bbbe979ec58fa7389/packages/eslint-plugin-react-hooks/src/ExhaustiveDeps.js#L1051 - рдПрд▓1081

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

@CarlosGines рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдПрдХ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдУрдкреА рдкреЛрд╕реНрдЯ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдпрд╣ рдПрдХ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдБ - рдЕрдиреНрдпрдерд╛ рдореЗрд░реЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред рдЦрд╛рд╕рдХрд░ рдЬрдм рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реЛред

рдореИрдВрдиреЗ рдЙрдореНрдореАрдж рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╕рдВрджреЗрд╢реЛрдВ рдФрд░ рдмреЗрд╣рддрд░ рдЕрдиреБрдорд╛рди рдХреЗ рд╕рд╛рде рдЕрднреА [email protected] рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЖрдЬрд╝рдорд╛рдПрдВред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде, рдЗрд╕реЗ рдЙрдЪрд┐рдд рд╕рд▓рд╛рд╣ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рд╡рд╣ [email protected] рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╣рд╛рдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рдХреБрдЫ рдЫреЛрдЯреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде [email protected] рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рд╣реИред

@gaearon рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рднреА рд╕рдВрдпреЛрдЧ рд╕реЗ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЗ рдЕрдВрджрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП eslint рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ?

@einarq рд╢рд╛рдпрдж рдРрд╕рд╛ рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛?

const useDidMount = fn => {
  const callbackFn = useCallback(fn)
  useEffect(() => {
    callbackFn()
  }, [callbackFn])
}

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

рдореИрдВрдиреЗ рдпрд╣ рдиреЛрдЯ рдбреЙрдХреНрд╕ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ:

рдиреЛрдЯ: рдпрджрд┐ рдЖрдк рдХреНрд░рд┐рдПрдЯ рд░рд┐рдПрдХреНрдЯ рдРрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рд▓реАрдЬрд╝ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рд╕реАрдзреЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдирд┐рдпрдо рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рд╣рд╛рдБ, рдЬрдм рддрдХ рд╣рдо рдЗрд╕реЗ рд╡рд╣рд╛рдБ рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ, рддрдм рддрдХ рдЖрдкрдХреЛ рдЗрд╕реЗ ESLint рдХреЙрдиреНрдлрд╝рд┐рдЧ рдореЗрдВ рдЗрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдПрдХ рд╢рд╛рдЦрд╛ рдореЗрдВ рдмреЗрджрдЦрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдорд░реНрдЬ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред :-)

рдирдорд╕реНрддреЗ,

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

рд╣рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рд╣реБрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ Fetch API рдХреЗ рдЖрд╕рдкрд╛рд╕ рдмрдирд╛рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдмрдирд╛рдпрд╛ рд╣реИред

рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкрд░ рдЙрджрд╛рд╣рд░рдг

https://codesandbox.io/s/kn0km7mzv

рдиреЛрдЯ: рд╕рдорд╕реНрдпрд╛ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдбреАрдбреАрдУрдПрд╕ jsonplaceholder.typicode.com рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдиреБрд░реЛрдз рд╕реАрдордХ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╣рд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрд╕реАрдорд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЖрдЧ рд▓рдЧрд╛рдирд╛ рдЧрд▓рдд рд▓рдЧрд╛ред

рд╡реНрдпрд╛рдЦреНрдпрд╛

рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рдХреЗ 3 рд╕рдВрднрд╛рд╡рд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рд╣реИ: рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд╕рдлрд▓рддрд╛ рдФрд░ рддреНрд░реБрдЯрд┐ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдордиреЗ рдПрдХ рдХрд╕реНрдЯрдо рд╣реБрдХ useFetch() рдЬреЛ 3 рдЧреБрдг рджреЗрддрд╛ рд╣реИ isLoading , response рдФрд░ error. It makes sure that either рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ or рддреНрд░реБрдЯрд┐ is set and updates isLoading . As the name implies, it uses the Fetch` API.

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ 3 useState рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

  const [isLoading, setIsLoading] = useState(false);
  const [response, setResponse] = useState(null);
  const [error, setError] = useState(null);

рдФрд░ рдПрдХ useEffect рд╣реБрдХ:

useEffect(
    () => {
      fetch(url, fetchConfig)
        .then(/* Handle fetch response... See Codesandbox for the actual implementation */)
    },
    [url]
  );

рдпрд╣ рддрдм рддрдХ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ useEffect рдХреА рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА рдореЗрдВ рдХреЗрд╡рд▓ [url] ред рдпрджрд┐ рд╣рдо fetchConfig (= [url, fetchConfig] ) рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ рдкрд░рд┐рдгрдд рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдкреНрд░рднрд╛рд╡ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЬрдм url рдмрджрд▓рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд▓рд┐рдВрдЯрд░ рдХреЗрд╡рд▓ [url] рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ ( v1.4.0 рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ v1.5.0-beta.1 )ред

рдХрд╕реНрдЯрдо рд╣реБрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ, 3 рд░рд╛рдЬреНрдп рдЪрд░ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ:

  return {
    error,
    isLoading,
    response
  };

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдорд╛рдВрдЧрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд╣реА рдЬрдЧрд╣ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓рд╛рдЗрдирд┐рдВрдЧ рд╕реБрдЭрд╛рд╡ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ fetchConfig рдмрджрд▓ рдЬрд╛рдП? рдЖрдк рдЗрд╕реЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ?

рдареАрдХ рд╣реИред рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд╕реБрдзрд╛рд░реЛрдВ рдФрд░ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде [email protected] рдЬрд╛рд░реА рдХрд┐рдпрд╛ред
рдпрд╣ рдзрд╛рдЧрд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдкреИрдЯрд░реНрди рдЦреЛрдЬрдиреЗ рдореЗрдВ рдмреЗрд╣рдж рдорджрджрдЧрд╛рд░ рд░рд╣рд╛ рд╣реИред

рдЖрдк рд╕рднреА рдХрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред (рдЦрд╛рд╕рдХрд░ рд╡реЗ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреАред :-)


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

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

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

рдЪреАрдпрд░реНрд╕!

тЭдя╕П

@timkraut рдЖрдкрдХреЛ fetchConfig рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдШрдЯрдХ рдХреЛ рдЗрд╕реЗ рдореЗрдореЛ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╕рдВрджрд░реНрдн рдмрдирд╛ рд░рд╣реЗред
рдПрдХ рдЙрджрд╛рд╣рд░рдг: https://codesandbox.io/s/9l015v2x4w


рдЗрд╕рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рдШрдЯрдХ рдХреЛ рд╣реБрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ...

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

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

https://codesandbox.io/s/40v54jnkyw

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЛ рд╕реНрд╡рдд: рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд╡реНрдпрд╛рдЦреНрдпрд╛

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

  useEffect(
    () => {
      if (autoSaveTick % 5 === 0) {
        setAutosaveValue(
          `${input1Value.value}, ${input2Value.value}, ${input3Value.value}`
        );
      }
    },
    [autoSaveTick]
  );

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

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

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ fetchConfig рдмрджрд▓ рдЬрд╛рдП? рдЖрдк рдЗрд╕реЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ?

рдореИрдВ рдЗрд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдареАрдХ рд░рд╣реЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реЗрд╖ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

рдЗрд╕рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рдШрдЯрдХ рдХреЛ рд╣реБрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ...

рдареАрдХ рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рднреА рд╣реИ: / рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╣рдордиреЗ рд╢рд░реАрд░ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, useMemo() рдЬрдм рднреА рд╣рдо рдЗрд╕ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ 2

рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧ рдкреНрд░рднрд╛рд╡ рдХреИрд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдкрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдирд┐рдпрдо рдХреА рд╢рд┐рдХрд╛рдпрдд рдХрд┐рдП рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд░реНрднрд░рддрд╛ рд╣реЛрддреА рд╣реИ?

рдХрд╣реЛ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

useEffect(() => { init({ dsn, environment}) }, [])

рдЗрд╕рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рдШрдЯрдХ рдХреЛ рд╣реБрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ...

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

рдпрджрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реНрдерд┐рд░ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╣реБрдХ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред createFetch(config) рдЬреЛ useFetch() рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЖрдк рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЛ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдмреБрд▓рд╛рддреЗ рд╣реИрдВред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИред рдЬрд┐рд╕ useSubscription рдкрд░ рд╣рдо рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд╕рд╛рде рднреА рд╣рдореЗрдВ рдРрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдЖрдо рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ useMemo рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡реИрдз рдЙрддреНрддрд░ рд╣реИ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрджрдд рдбрд╛рд▓рдиреА рдЪрд╛рд╣рд┐рдПред

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ тАФ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдЧрддрд┐рд╢реАрд▓ рд╡рд╕реНрддреБ рдХреЛ рд╕реНрдерд┐рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рддрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИред

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

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

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

@gaearon рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ (рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрд┐рд╕реА рдХреЗ рд╕рд┐рд░ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ) :) рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдШрдЯрдХрдбрд┐рдбрдорд╛рдЙрдВрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

рдореИрдВ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдерд╛, рд▓реЗрдХрд┐рди рдирд┐рдпрдо рдореБрдЭреЗ рдмрддрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдореЗрд╢рд╛ рд╕рд░рдгреА рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред

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

  1. рдШрдЯрдХ рдШреБрдбрд╝рд╕рд╡рд╛рд░, рдПрдХ рдкреНрд░реЛрдк рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░реЗрдВ
  2. рдШрдЯрдХ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ (рдЙрджрд╛рд╣рд░рдг: рдкреНрд░реЛрдк рд╡реИрд▓реНрдпреВ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ), рдирдП рдкреНрд░реЛрдк рд╡реИрд▓реНрдпреВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░реЗрдВ

рдирдВрдмрд░ 1 рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рддрд░реНрдХ рдХреЛ componentDidMount / useEffect рд╢рд░реАрд░ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ
рдирдВрдмрд░ 2 рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк componentDidUpdate / useEffect рдореЗрдВ рддрд░реНрдХ рдбрд╛рд▓рддреЗ рд╣реИрдВ

рдирд┐рдпрдо рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЖрдк рдлреНрд▓реЛ рдХрд╛ рдирдВрдмрд░ 2 рднрд╛рдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

@gaearon рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ (рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрд┐рд╕реА рдХреЗ рд╕рд┐рд░ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ) :) рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдШрдЯрдХрдбрд┐рдбрдорд╛рдЙрдВрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

рдореИрдВ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдерд╛, рд▓реЗрдХрд┐рди рдирд┐рдпрдо рдореБрдЭреЗ рдмрддрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдореЗрд╢рд╛ рд╕рд░рдгреА рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдФрд░ @asylejmani рдпрд╣рд╛рдВ рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк @gaearon рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣
рдХреНрдпрд╛ рдпрд╣ рдЙрдЪрд┐рдд рдмрдпрд╛рди рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдкреНрд░рджрд╛рди рдХрд░рдирд╛ "рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ" рдХрд╣рдиреЗ рдЬреИрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрднреА рднреА рдирд┐рдпрдо рдХреНрдпреЛрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

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

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

@asylejmani https://github.com/facebook/react/issues/14920#issuecomment -466378650 рдХреЗ рд╕рдорд╛рди рдЖрдкрдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ? рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рд╕рдордЭрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рдпрдо рд╡реИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдЙрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдЖрдо рд╣реИ рд╡рд╣ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ:

useEffect(() => {
    if(!dataIsLoaded) { // flag from redux
        loadMyData(); // redux action creator
    }
}, []);

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

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

рдЖрдкрдХреЗ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдЬреАрд╡рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП :)

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

@einarq рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдХреБрдЫ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "

рдореИрдВ рдпрд╣ рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рдпрдо рдЗрдирд▓рд╛рдЗрди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдк рдареАрдХ-рдареАрдХ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореЗрд░рд╛ рдкреВрд░рд╛ рднреНрд░рдо [] рдмрдирд╛рдо [рдХреБрдЫ] рдерд╛, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж @gaearon рднрдпрд╛рдирдХ рдХрд╛рдо рдХреЗ рд▓рд┐рдП :)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдФрд░ @asylejmani рдпрд╣рд╛рдВ рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк @gaearon рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣

рд╣рд╛рдВред рдпрджрд┐ рдЖрдкрдХрд╛ рдШрдЯрдХ рдХрд┐рд╕реА рдкреНрд░реЛрдк рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЛ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реИред useEffect рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдЗрди рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛рддреА рд╣реИ: https://github.com/facebook/react/issues/14920#issuecomment -470913287ред

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

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

рдЕрднреА рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╢рд╛рдпрдж рдирд┐рдпрдо рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

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

>

рдПрдХ рдЯрди рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж

8 рдорд╛рд░реНрдЪ 2019 рдХреЛ, 15:27 рдмрдЬреЗ, рдбреИрди рдЕрдмреНрд░рд╛рдореЛрд╡ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдФрд░ @asylejmani рдпрд╣рд╛рдВ рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк @gaearon рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣

рд╣рд╛рдВред рдпрджрд┐ рдЖрдкрдХрд╛ рдШрдЯрдХ рдХрд┐рд╕реА рдкреНрд░реЛрдк рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЛ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реИред UseEffect рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдЗрди рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛рддреА рд╣реИ: #14920 (рдЯрд┐рдкреНрдкрдгреА)ред

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

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

рдЕрднреА рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╢рд╛рдпрдж рдирд┐рдпрдо рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

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

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред

@ рднрдпрднреАрдд

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╣рдордиреЗ рдЖрдЬ @threepointone рдХреЗ рд╕рд╛рде рдЗрди рдкрд░ рдПрдХ рдкрд╛рд╕ рдХрд┐рдпрд╛ред рдпрд╣рд╛рдБ рдПрдХ рд╕рд╛рд░рд╛рдВрд╢ рд╣реИ:

рд▓рд┐рдВрдЯ рдирд┐рдпрдо рдореЗрдВ рдлрд┐рдХреНрд╕реНрдб

рдЕрддрд┐рд░рд┐рдХреНрдд useEffect рдирд┐рд░реНрднрд░рддрд╛рдПрдВ

рдирд┐рдпрдо рдЖрдкрдХреЛ "рдмрд╛рд╣рд░реА" рд╡рд┐рд╡рд░рдг рдХреЛ useEffect рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рдиреВрдиреА рдкрд░рд┐рджреГрд╢реНрдп рдореМрдЬреВрдж рд╣реИрдВред

рдПрдХ рд╣реА рдШрдЯрдХ рдореЗрдВ рдХрд╛рд░реНрдп рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡ рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд

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

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рд╡рд░реНрде рдлрд┐рдХреНрд╕рд┐рдВрдЧ

рдкреНрд░реЙрдкреНрд╕ рдЪреЗрдВрдЬ рдкрд░ рд╕реНрдЯреЗрдЯ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛

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

"рдореЗрд░рд╛ рдЧреИрд░-рдХрд╛рд░реНрдп рдорд╛рди рд╕реНрдерд┐рд░ рд╣реИ"

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

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

const useFetch = createFetch({ /* config object */});
const useDebounce = createDebounce(500);
const FormInput = createInput({ rules: [emailValidator, phoneValidator] });

рддрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддрдм рддрдХ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛ рдЬрдм рддрдХ рдЖрдк рдЗрд╕реЗ рд░реЗрдВрдбрд░ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рдбрд╛рд▓рддреЗред (рдЬреЛ рдЖрдкрдХреЗ рд╣реБрдХ рдХрд╛ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред) рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ <Slider min={50} /> рдХрднреА рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ - рдХреЛрдИ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ <Slider min={state ? 50 : 100} /> рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЛрдИ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

let slider
if (isCelsius) {
  slider = <Slider min={0} max={100} />
} else {
  slider = <Slider min={32} max={212} />
}

рдЕрдЧрд░ рдХреЛрдИ рд░рд╛рдЬреНрдп рдореЗрдВ isCelsius рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИ, рддреЛ min рдХрднреА рдирд╣реАрдВ рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдШрдЯрдХ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ Slider рд╡рд╣реА рд╣реЛрдЧрд╛ (рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдкреЗрдбрд╝ рдореЗрдВ рдЗрд╕рдХреА рд╡рд╣реА рд╕реНрдерд┐рддрд┐ рд╣реИ)ред рддреЛ рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ рдкреНрд░рдореБрдЦ рдлреБрдЯрдЧрди рд╣реИред рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдПрдХ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдкрдбреЗрдЯ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛рдУрдВ рдХреА рддрд░рд╣ рд╣реА рдкреНрд░рд╕реНрддреБрдд рд╣реЛрддреЗ рд╣реИрдВ (рдЖрдк рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддреЗ рдХрд┐ рдХреМрди рд╕рд╛ рд╣реИ)ред рдЪрд╛рд╣реЗ рдЖрдк рдкреНрд░реЛрдк рд╡реИрд▓реНрдпреВ рдмреА рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ, рдпрд╛ рдЪрд╛рд╣реЗ рдЖрдк рдкреНрд░реЛрдк рд╡реИрд▓реНрдпреВ рдП рд╕реЗ рдмреА рддрдХ рдЬрд╛рдПрдВ - рдпрд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

function useMyHook(a) {
  const initialA = usePossiblyStaleValue(a);
  // ...
}

function usePossiblyStaleValue(value) {
  const ref = useRef(value);

  if (process.env.NODE_ENV !== 'production') {
    if (ref.current !== value) { // Or your custom comparison logic
      console.error(
        'Unlike normally in React, it is not supported ' +
        'to pass dynamic values to useMyHook(). Sorry!'
      );
    }
  }

  return ref.current;
}

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

"рдореЗрд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдорд╛рди рд╕реНрдерд┐рд░ рд╣реИ"

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

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

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

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

рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЕрднреА рднреА рдЗрд╕реЗ useCallback рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдпрд╣ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИ , рдФрд░ рдЖрдк рдмрдЧ рдХреЛ рдЬреЛрдЦрд┐рдо рдореЗрдВ рдбрд╛рд▓реЗ рдмрд┐рдирд╛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЬреИрд╕реЗ onChange={shouldHandle ? handleChange : null} рдпрд╛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ foo ? <Page fetch={fetchComments /> : <Page fetch={fetchArticles /> рд░реЗрдВрдбрд░ рдХрд░рдирд╛ред рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ fetchComments рдЬреЛ рдореВрд▓ рдШрдЯрдХ рд╕реНрдерд┐рддрд┐ рдкрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣реА рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдЗрд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЪреБрдкрдЪрд╛рдк рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рд╕рдВрджрд░реНрдн рд╡рд╣реА рд░рд╣реЗрдЧрд╛ред рддреЛ рдЖрдкрдХрд╛ рдмрдЪреНрдЪрд╛ рдЙрд╕ рдЕрдкрдбреЗрдЯ рд╕реЗ рдЪреВрдХ рдЬрд╛рдПрдЧрд╛ - рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдЪреНрдЪреЗ рдХреЛ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдШрдЯрдХреЛрдВ рдФрд░ useCallback , рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд╣рдЪрд╛рди рд╕реНрд╡рдпрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ - рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛред рддреЛ рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдФрд░ рдмрдЪрдиреЗ рдореЗрдВ рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реИред

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

useWarnAboutTooFrequentChanges([deps]);

рдпрд╣ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдФрд░ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛рдлреА рдШрдЯрд┐рдпрд╛ рд╣реЛрддреЗ рд╣реИрдВред рдирд┐рдпрдо рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдлрд┐рдХреНрд╕ rules рд╕реНрдерд┐рд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреЛ createTextInput(rules) рдмрджрд▓рдХрд░, рдФрд░ register рдФрд░ unregister рдХреЛ useCallback рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ register рдФрд░ unregister рд╣рдЯрд╛ рджреЗрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рд╕реЗ рдмрджрд▓реЗрдВ рдЬрд╣рд╛рдВ рдЖрдк рдЕрдХреЗрд▓реЗ dispatch рдбрд╛рд▓рддреЗ рд╣реИрдВред рдлрд┐рд░ рдЖрдк рдЧрд╛рд░рдВрдЯреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╕реЗ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рдЪрд╛рди рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧреАред

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

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

рдпреМрдЧрд┐рдХ рдореВрд▓реНрдп рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдкреНрд░рднрд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╣реИред рдПрдХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд╡рд╣реА "рд▓реЙрдЧ" (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдлреЙрд░реНрдо рд╕рдмрдорд┐рдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ рдЕрдЧрд░ рд╣рдо рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдШрдЯрдХ рдЕрдирдорд╛рдЙрдВрдЯ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдкреНрд░рднрд╛рд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдареАрдХ рдмрд╛рдж рдЕрдирдорд╛рдЙрдВрдЯ рд╣реЛ рдЬрд╛рдП? рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдлреЙрд░реНрдо рдЬрдорд╛ рдХрд░рдиреЗ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╕рд┐рд░реНрдл "рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП"ред рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рднрд╛рд╡ рд╡рд╣рд╛рдВ рдЧрд▓рдд рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЙрд╕ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЖрдк рдЕрднреА рднреА рд╡рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдереА - рдЗрд╕рдХреЗ рдмрдЬрд╛рдп fullName рдХреЛ setSubmittedData({firstName, lastName}) рдмрдирд╛рдХрд░, рдФрд░ рдлрд┐рд░ [submittedData] рдЖрдкрдХреА рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк firstName рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ lastName ред

рдЕрдирд┐рд╡рд╛рд░реНрдп/рд╡рд┐рд░рд╛рд╕рдд рд╕рдВрд╣рд┐рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг

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


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

@gaearon , рдореБрджреНрджреЛрдВ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд╕рдорд╛рдкрди рд╕рд╛рд░рд╛рдВрд╢ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдореЗрд░реЗ рдирдореВрдиреЗ (#14920 (рдЯрд┐рдкреНрдкрдгреА) @trevorgithub рджреНрд╡рд╛рд░рд╛) рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ ред (рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реБрдИ рдереА; рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдореВрд▓ рдЯрд┐рдкреНрдкрдгреА рдЫрд┐рдкреЗ рд╣реБрдП рдЖрдЗрдЯрдо рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдореЗрдВ рдЦреЛ рдЧрдИ рд╣реИ)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдирдореВрдирд╛ 'рдЕрдирд┐рд╡рд╛рд░реНрдп/рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг' рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрдПрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж рдЕрдиреНрдп рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рднреА?

'рдЕрдирд┐рд╡рд╛рд░реНрдп/рд╡рд┐рд░рд╛рд╕рдд рд╕рдВрд╣рд┐рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг' рдореБрджреНрджреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХреЛрдИ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдХреИрд╕реЗ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬ рдХрд░реЗрдЧрд╛? рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди:
// eslint-disable-line react-hooks/exhaustive-deps

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореБрдЭреЗ рдпрд╣ рдпрд╛рдж рдЖ рдЧрдпрд╛ред

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

рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ "рдореИрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдк рддрдХ рдХрд┐рд╕реА рдкреНрд░реЛрдк рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ"ред рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рднреА рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ тАЬрдореЗрд░реЗ рдШрдЯрдХ рдХрд╛ рд░рд╛рдЬреНрдп рдореЗрдВ рдХрд╛рд░реНрдп рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЬрдм рджреВрд╕рд░рд╛ рдкреНрд░реЛрдк рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдкреНрд░реЛрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред тАЭ

рдЖрдо рддреМрд░ рдкрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рд░рд╛рдЬреНрдп рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛:

const [currentGetData, setCurrentGetData] = useState(getData);
const [prevRefreshRequest, setPrevRefreshRequest] = useState(refreshRequest);

if (prevRefreshRequest !== refreshRequest) {
  setPrevRefreshRequest(refreshRequest);
  setCurrentGetData(getData);
}

useEffect(() => {
  currentGetData(someId);
}, [currentGetData, someId]);

рдЖрдкрдХреЛ useCallback рдХреЛ getData рдЖрд╕рдкрд╛рд╕ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдк рдкрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

рдПрдХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд╡рд╣реА "рд▓реЙрдЧ" (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдлреЙрд░реНрдо рд╕рдмрдорд┐рдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИред

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

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

рдлрд┐рд░ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ async рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП useEffect рд╕реЗ рдЖрдкрдХреЛ рд╕рдлрд╛рдИ рдХрд╛рд░реНрдп рдорд┐рд▓рддрд╛ рд╣реИред

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

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

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд╣реБрдХ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ:

function useBoundCallback(fn, ...bound) {
  return useCallback((...args) => fn(...bound, ...args), [fn, ...bound]);
}

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

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

рдЗрд╕ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://codesandbox.io/s/vvv36834k5 ("рдЬрд╛рдУ!" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рдПрдХ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдШрдЯрдХреЛрдВ рдХрд╛ рдкрде рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ)


рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдирд┐рдпрдо рдХреЗ рд╕рд╛рде 2 рд▓рд┐рдЯрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ:

рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ (рдПрдХреНрд╕) рдореЗрдВ рдПрдХ рд▓рд╛рдкрддрд╛ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ: 'рдмрд╛рдзреНрдп'ред рдпрд╛ рддреЛ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдпрд╛ рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА рдХреЛ рд╣рдЯрд╛ рджреЗрдВ

рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ (X) рдХреА рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдкреНрд░рд╕рд╛рд░ рддрддреНрд╡ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХрд┐ рдЖрдкрдиреЗ рд╕рд╣реА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдкрд╛рд░ рдХреА рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ

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


рд╡рд┐рдЪрд╛рд░:

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

рд╣рд╛рдп @gaearon , рдореБрдЭреЗ рдЕрднреА рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓реА рд╣реИ, рдЬрд┐рд╕рдХреА рдЪрд░реНрдЪрд╛ рдореИрдВрдиреЗ рдХрд╣реАрдВ рдирд╣реАрдВ рдХреА рд╣реИ:

Accessing 'myRef.current' during the effect cleanup will likely read a different ref value because by this time React has already updated the ref. If this ref is managed by React, store 'myRef.current' in a variable inside the effect itself and refer to that variable from the cleanup function.

рдореБрдЭреЗ рдпрд╣ рд╕рдВрджреЗрд╢ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрдЭреЗ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдлрд╛рдИ рдкрд░ рд░реЗрдлрд░реА рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдкреНрд░рднрд╛рд╡ рдирд┐рдХрд╛рдп рдХреЗ рдореВрд▓реНрдп рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╣реА?
рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдЧрд░реВрдХ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдХреНрдпрд╛ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд/рд╡реИрдз рд╣реИ?

рдореЗрд░рд╛ рдорд╛рдорд▓рд╛, рдЕрдЧрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕
рдкреНрд░рд╕рдВрдЧ: рдХреБрдЫ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдлрд╝реЗрдЪрд┐рдВрдЧ рд╣реБрдХред рдореИрдВ рдПрдХ рд░реЗрдлрд░реА рдореЗрдВ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЕрдирдорд╛рдЙрдВрдЯ рдШрдЯрдХреЛрдВ рдкрд░ рдЕрдкрдбреЗрдЯ рджреЛрдиреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВред

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

@ рднрдпрднреАрдд

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

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

@ рдбреЗрд╡рд┐рдбрдЬреЗ13

рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реА рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдЬрдм рджреВрд╕рд░реА рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ?

рдХреГрдкрдпрд╛ рд▓рд┐рдВрдЯ рдирд┐рдпрдо рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред

рдХреНрдпрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЗрд╕ рдирд┐рдпрдо рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рдЬрдЧрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдЖрдк рд╣рдореЗрд╢рд╛ // eslint-disable-next-line react-hooks/exhaustive-deps рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред

@CarlosGines

рдореБрдЭреЗ рдпрд╣ рд╕рдВрджреЗрд╢ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрдЭреЗ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдлрд╛рдИ рдкрд░ рд░реЗрдлрд░реА рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдкреНрд░рднрд╛рд╡ рдирд┐рдХрд╛рдп рдХреЗ рдореВрд▓реНрдп рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╣реА?

рд╣рд╛рдВред

рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдЧрд░реВрдХ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдХреНрдпрд╛ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд/рд╡реИрдз рд╣реИ?

рдЙрдореНрдореНрдо .. рдЕрдЧрд░ рд╡рд╣ рдмрдЧ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдирд╣реАрдВред рдореИрдВ

рдкреНрд░рд╕рдВрдЧ: рдХреБрдЫ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдлрд╝реЗрдЪрд┐рдВрдЧ рд╣реБрдХред рдореИрдВ рдПрдХ рд░реЗрдлрд░реА рдореЗрдВ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЕрдирдорд╛рдЙрдВрдЯ рдШрдЯрдХреЛрдВ рдкрд░ рдЕрдкрдбреЗрдЯ рджреЛрдиреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВред

рд╣рд╛рдБ рд╢рд╛рдпрдж рдпрд╣ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╡реИрдз рд╣реИред pls рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ?

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

рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди рдФрд░ рдЙрддреНрддрд░: https://github.com/facebook/react/issues/14920#issuecomment -471070149

рдпрджрд┐ рдЖрдк useEffect рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдкрд░ рдПрдХ рдЧрд╣рд░рд╛ рдЧреЛрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдпрд╣рд╛рдБ рд╣реИ: https://overreacted.io/a-complete-guide-to-useeffect/

рд╣рдо рдЬрд▓реНрдж рд╣реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдФрд░ рд╕рд╛рдордЧреНрд░реА рднреА рдЬреЛрдбрд╝реЗрдВрдЧреЗ.

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

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

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

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

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

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

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

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