React: рдХреНрдпрд╛ ComponentDidMount рдХреЗ рднреАрддрд░ рдирдП рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдорд╛рд░реНрдЪ 2018  ┬╖  41рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/react

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

рд╣рдо 16.2.0 рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдпрд╣ 16.3.0 рдХреЛ рдПрдХ рдирдпрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджрд░реНрдн рд╡рд┐рд╡рд░рдг рдкрдврд╝рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ
ComponentsDidMount рдЬреАрд╡рдирдЪрдХреНрд░ рдкрд░ (рдЬреЛ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ)ред

рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИ ?

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

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

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

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

class Button extends React.Component {
  componentDidMount() {
    alert(this.props.theme);
  }

  render() {
    const { theme, children } = this.props;
    return (
      <button className={theme ? 'dark' : 'light'}>
        {children}
      </button>
    );
  }
}

export default React.forwardRef((props, ref) => (
  <ThemeContext.Consumer>
    {theme => <Button {...props} theme={theme} ref={ref} />}
  </ThemeContext.Consumer>
));

рдпрд╣ contextTypes рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд░рд╛рд╢рд┐ рд╣реИред

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

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рдирд╛ рдХрд┐ рдореИрдВ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: https://codesandbox.io/s/l20yn296w7

EDIT: https://github.com/reactjs/rfcs/blob/master/text/0002-new-version-of-context.md#class -based-api рд╕реЗ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди

рдирдИ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

class BaseMapElement extends React.Component {
  componentDidMount() {
    console.log(this.props.context);
  }

  render() {
    return null;
  }
}

const MapElement = () => (
  <Context.Consumer>
    {context =>
      <BaseMapElement context={context} />
    }
  </Context.Consumer>
)

рддреЛ componentDidMount рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: componentDidMount рдмрджрд▓рд╛ рдЧрдпрд╛

рдЙрдЪреНрдЪ рдХреНрд░рдо рдШрдЯрдХ рдЬреЛ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреИрдЯрд░реНрди рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдШрдЯрдХ рдЖрдорддреМрд░ рдкрд░ рд╡рд╛рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ I рдореИрдВ рдШрдЯрдХ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╕рдВрджрд░реНрдн рдореВрд▓реНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ: this.contextValue = value рддрдм рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░реЗрдВ рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХред рдпрд╣ рдереЛрдбрд╝рд╛ рдмрджрд╕реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рд╣реИ рдЖрдо рддреМрд░ рдкрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд░, рд╣реЙрдХ, рдкреИрдЯрд░реНрди рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж

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

рдШрдЯрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╕рдВрджрд░реНрдн рдорд╛рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВ: this.contextValue = рдорд╛рди рдлрд┐рд░ рдЗрд╕реЗ рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░реЗрдВ

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ async рдореЛрдб рдореЗрдВ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдХреГрдкрдпрд╛ рдРрд╕рд╛ рди рдХрд░реЗрдВред cc @acdlite

рд╣рд╛рдБ рдпрд╣ рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХреЛ рджреВрд╕рд░реЗ рдШрдЯрдХ рдореЗрдВ рд▓рдкреЗрдЯрдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ! рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рд╕реЗ рд╕рд╣рдордд рд╣реВрдБред componentDidMount рдФрд░ componentWillUnmount рдорд╛рдзреНрдпрдо рд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ / рдЪреАрдЬреЛрдВ рдХреЛ рдЖрд░рдореНрдн рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП,

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

tl; dr: рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдШрдЯрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ async рдореЛрдб рдореЗрдВ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдХреГрдкрдпрд╛ рдРрд╕рд╛ рди рдХрд░реЗрдВред

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

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

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЕрдЧрд░ рдКрдкрд░ рд╕реЗ рдЧреБрд╕реНрд╕рд╛ / рдЧреБрд╕реНрд╕рд╛ рдЖ рд░рд╣рд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдЙрд╕ рд╕реНрд╡рд░ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ! рдлрд╣реБрдУрди рдкрд░

рдЗрд╕рдиреЗ рдЧреБрд╕реНрд╕реЗ рдореЗрдВ рд╣рд╛рд╣рд╛ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрдкрдХреА рдмрд╛рдд рд╕рдордЭ рдореЗрдВ рдЖ рдЧрдИ рдФрд░ рдореИрдВ рдЖрдкрдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ / рдХреНрдпреЛрдВ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛

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

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

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

рдпрд╣ рдХреИрд╕реЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛ (рдФрд░ рдХрд┐рд╕ рддрд░реАрдХреЗ рд╕реЗ)?

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдореЗрд░реА рдмрд╛рдд рджреЗрдЦрдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓рд╛? рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдЧрд░ рдЖрдкрдиреЗ рдЗрд╕рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдРрд╕рд╛

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

Async рдореЗрдВ, рдЕрдВрдЧреВрдареЗ рдХрд╛ рдирд┐рдпрдо рд╣реИ: рдХреЗрд╡рд▓ рдЬреАрд╡рди рдЪрдХреНрд░ рдЬреИрд╕реЗ componentDidMount , componentDidUpdate , рдФрд░ componentWillUnmount рдФрд░ Ref рдХреЙрд▓рдмреИрдХ рдкреНрд░реЙрдкреНрд╕ рдФрд░ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рд╕рдордп рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдЕрдиреБрд░реВрдк рд╣реЛрддреЗ рд╣реИрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреНрдпрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдХреБрдЫ рдЕрдиреНрдп рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реИрдВ рдЬреЛ рдмрдбрд╝реЗ рдХрд░реАрдиреЗ рд╕реЗ рдЗрд╕ рддрд╕реНрд╡реАрд░ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрдирдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдкреЗрд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ( getDerivedPropsFromState , getSnapshotBeforeUpdate )ред рдпрд╣ рдПрдХ рдХреНрд░рдорд┐рдХ рдкреНрд░рд╡рд╛рд╕рди рд╣реЛрдЧрд╛ред рдлрд┐рд░, рдпрд╣ рд╕рдм рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

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

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

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

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

class Button extends React.Component {
  componentDidMount() {
    alert(this.props.theme);
  }

  render() {
    const { theme, children } = this.props;
    return (
      <button className={theme ? 'dark' : 'light'}>
        {children}
      </button>
    );
  }
}

export default React.forwardRef((props, ref) => (
  <ThemeContext.Consumer>
    {theme => <Button {...props} theme={theme} ref={ref} />}
  </ThemeContext.Consumer>
));

рдпрд╣ contextTypes рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд░рд╛рд╢рд┐ рд╣реИред

рд╣рд╛рдБ рдпрд╣ рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХреЛ рджреВрд╕рд░реЗ рдШрдЯрдХ рдореЗрдВ рд▓рдкреЗрдЯрдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ! рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдбреИрди рдиреЗ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рд╛ рдХрд┐ рдЪрд╛рдЗрд▓реНрдб рдлрдВрдХреНрд╢рди / рд░реЗрдВрдбрд░ рдкреНрд░реЙрдкрд░ рдЕрдкреНрд░реЛрдЪ рдирдП рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП _official API_ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рджреЗрдВ рдХрд┐ рдпрд╣ рдЬрд▓реНрджреА рд╣реИ (рдпрд╣!)

рдпрд╣ рдХреИрд╕реЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛ (рдФрд░ рдХрд┐рд╕ рддрд░реАрдХреЗ рд╕реЗ)?

рдбреНрд░рд╛рдлреНрдЯ рд╕реНрдЯреНрд░рд┐рдХреНрдЯ рдореЛрдб рдбреЙрдХреНрд╕ рдЗрд╕ рдмрд╛рдд рдХреЛ рднреА рдЫреВрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ (рдЬреЛ рдХрд┐ рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реИ) async рдореЛрдб рдореЗрдВ рдЦрддрд░рдирд╛рдХ рд╣реИред

рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реА рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╢рд╛рдЦрд╛ рд╣реИред рдХрд┐рд╕реА рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд░ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? https://github.com/commodityvectors/react-mapbox-gl/pull/11

рдореИрдВ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд▓реЛрдЧ рдХрднреА рднреА рдЗрд╕рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд░реЗрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ- рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд┐рдпрд╛, рддреЛ рдЙрд╕ рдкреАрдЖрд░ рдкрд░ withContext рдорд┐рдХреНрд╕рд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдирдпрд╛ forwardRef API ред

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

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

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

const MapElement = (props) => (
  <Context.Consumer>
    {context =>
      <RunOnLifecycle
        runOnMount={() => { /*use context*/ }}
        runOnUnMount={() => { /*use context*/ }}
        runOnUpdate={(prevProps) => { /*use context - compare prevProps with props */ }}
        { ...props }
      />
    }
  </Context.Consumer>
)

рдФрд░ рд╡рд╣ рд╕рд╣рд╛рдпрдХ рдШрдЯрдХ <RunOnLifecycle/> :

export interface IPropsRunOnLifecycle {
  runOnMount?: () => void;
  runOnUpdate?: (prevProps: object) => void;
  runOnUnMount?: () => void;
  children?: JSX.Element | ReactNode;
  [prop: string]: any;
}

export class RunOnLifecycle extends React.Component<IPropsRunOnLifecycle> {
  componentDidUpdate(prevProps, prevState, snapshot) {
    if (this.props.runOnUpdate != null) {
      this.props.runOnUpdate(prevProps);
    }
  }

  componentDidMount() {
    if (this.props.runOnMount != null) {
      this.props.runOnMount();
    }
  }

  componentWillUnmount() {
    if (this.props.runOnUnMount != null) {
      this.props.runOnUnMount();
    }
  }

  render() { return this.props.children || null; }
}

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

рдХреБрдЫ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИрдВ рдЬреЛ рдПрдХ рдмреБрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ MapElement рдПрдХ рд╡рд░реНрдЧ рдШрдЯрдХ рдерд╛ рдЬреЛ Refs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛, рддреЛ рдЬрдм runOnMount рдХреЙрд▓рдмреИрдХ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рдерд╛, рддреЛ refs рдХреЛ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

ЁЯШД рдореИрдВ рдЗрд╕рдХреЗ рдмрджрд▓реЗ HOC рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛:
https://reactjs.org/docs/context.html#consuming -context-with-a-hoc

рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП HOC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд╣рд▓реВ forwardRef API рджреНрд╡рд╛рд░рд╛ рдХрдо рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
https://reactjs.org/docs/react-api.html#reactforwardref

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

https://github.com/commodityvectors/react-mapbox-gl/blob/master/src/Map.js#L63

рдХреБрдЫ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИрдВ рдЬреЛ рдПрдХ рдмреБрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ MapElement рдПрдХ рд╡рд░реНрдЧ рдШрдЯрдХ рдерд╛ рдЬреЛ Refs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛, рддреЛ рдЬрдм рддрдХ RunOnMount рдХреЙрд▓рдмреИрдХ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ Refs рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

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

рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд░реЗрдл рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдзреНрдпрд╛рди рд░рдЦреЗрдВред

рдЬрд╝рд░рд╛ рд╕реБрдирд┐рдП рд╕рднреА,

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

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реВрдВрдЧрд╛ рдЕрдЧрд░ рдХреЛрдИ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВред

рдореИрдВ рдПрдВрдЬрд╛рдЗрдо, рдПрдВрдЬрд╛рдЗрдо-рдПрдбреЗрдкреНрдЯрд░-рд░рд┐рдПрдХреНрд╢рди -16 рдФрд░ рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИред

@AmnArora

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

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

// MyComponent.js
export class MyComponent extends Component { /* ... */ }
export default HOC()(MyComponent)

// MyComponent.spec.js
import { MyComponent } from '...'

// OtherComponents.js
import MyComponent from '...'

рд╕рд╛рде рд╣реА, рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ https://www.npmjs.com/package/react-context-consumer-hoc рдХреЛ рдмрдирд╛рдпрд╛ рдЬреЛ рдХрдИ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╕рдм рдХреБрдЫ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдм, рдореИрдВ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВред

@AnnArora рдЖрдк рдПрдХ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдХреНрдпреЛрдВ рд╣реИрдВ? рдЖрдкрдиреЗ рдХреНрдпрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ? рдЖрдк рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ?

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

рдЯреЗрд╕реНрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдЕрднреА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдХрд╛рдо рд╣реИред рдореИрдВ https://www.npmjs.com/package/react-context-consumer-hoc рдкрд░ рдПрдХ рдирдЬрд╝рд░

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

@bvaughn рдмрд╛рдд рдкрд╣рд▓реЗ рдХреА рд╣реИ рдЬрдм рдореИрдВ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП

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

рдФрд░ рдЬрдм рдореИрдВ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ рддреЛ рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рдереА: _unknown рдиреЛрдб рдЯреИрдЧ 12_ рдХреЗ рд╕рд╛рде

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

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

рдореБрдЭреЗ redux рдФрд░ unistore (рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдкреНрд░рджреВрд╖рдг / рдЕрддрд┐рд░рд┐рдХреНрдд рдореВрд╡рд┐рдВрдЧ рдкрд╛рд░реНрдЯреНрд╕ imo) рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЕрд░реБрдЪрд┐ рд╣реБрдИ, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯрдЕрдк рддрдХ рдкрд╣реБрдБрдЪрд╛рдпрд╛, рдЬреЛ рд╣рдорд╛рд░реЗ рдиреЗрд╕реНрдЯреЗрдб рдШрдЯрдХреЛрдВ рдХреЛ рдПрдХ рдПрдХрд▓ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛рдиреА рдкрд╛рда рдЗрдирдкреБрдЯ рдорд╛рди, рдЯреЙрдЧрд▓ рдорд╛рди) рдкреНрд░рддреНрдпреЗрдХ рдиреЗрд╕реНрдЯреЗрдб рдШрдЯрдХреЛрдВ рдХреА рд╕реНрдерд╛рдиреАрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

https://github.com/davalapar/session-context

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

рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ?

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ рдЬрд╣рд╛рдВ рдореЗрд░реЗ 3 рдШрдЯрдХ рдереЗред рдирд┐рд░реНрдорд╛рддрд╛, рдкреНрд░рджрд░реНрд╢рди, рд╕реЗрд▓ред
рд╕реЗрд▓ рдореЗрдВ рдореЗрд░рд╛ рд░реЗрдВрдбрд░ рд▓реЙрдЬрд┐рдХ рд╣реИ рдЬреЛ рдХреНрд░рд┐рдПрдЯрд░ рдФрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ рджреЛрдиреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рд╡рд╣рд╛рдБ рдПрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛ рдКрдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬреЛрдбрд╝реА Context.Consumer рдореЗрдВ рдорд╛рдиреЛрдВ componentDidMount ред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЖрдЬрдорд╛рдпрд╛? рдХреНрдпрд╛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛?

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ 16.6 рдиреЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ contextType API рдЬреЛрдбрд╝рд╛ рд╣реИ рдЬреЛ componentDidMount рдЖрд╕рд╛рди рдореЗрдВ рдирдпрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИред

https://reactjs.org/docs/context.html#classcontexttype

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

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ 16.6 рдиреЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ contextType API рдЬреЛрдбрд╝рд╛ рд╣реИ рдЬреЛ componentDidMount рдЖрд╕рд╛рди рдореЗрдВ рдирдпрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИред

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдПрдХ рднреА рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рддреЛ Class.contextType рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред рдПрдЪрдУрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдпрд╣реА рд╕рдЪ рд╣реИред

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

contextType API рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ _does_ componentDidMount (рдЬреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ) рдореЗрдВ рд╕рдВрджрд░реНрдн рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рд╣рдо рдЕрдкрдиреЗ рдбреЙрдХреНрд╕ рдореЗрдВ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдкрд░ рд░рдЪрдирд╛ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ ...

рдпрд╣ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╣реИ ...

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

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

... рдЬреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ ...

рд╣рд╛рдВ, рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдереЛрдбрд╝рд╛ рд╣рдЯрдХрд░ рд╣реИред

рд╕рдВрджрд░реНрдн рдмрджрд▓рдирд╛

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

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

рдХреНрдпрд╛ MyCoolComponent.contextType рдЙрдиреНрд╣реЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреА рд░рдЪрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ?

рдореЗрд░рд╛ рдкрдврд╝рд╛ рд╣реИ рдХрд┐ рдЕрдм рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рд╣рдо рдПрдХ рдШрдЯрдХ рд╣реИ рдХрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдХ) рдХрдИ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░реЗрдВ
рдЦ) рдЙрди рд╕рдВрджрд░реНрднреЛрдВ рдХреА рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ render рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд░реЗрдВ

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЖрджрд░реНрд╢ рд╕реНрдерд┐рддрд┐ рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рджреЛрдиреЛрдВ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда (рдпрд╛рдиреА рдкреВрд░реЗ рд╡рд░реНрдЧ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрдИ рд╕рдВрджрд░реНрдн) рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

MyCoolComponent.contextType =  composeContexts(OneContext, TwoContext, RedContext, BlueContext)

рдХреНрдпрд╛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рдпрд╣ рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ .... рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ ??

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

рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ v15.x рд╕реЗ v16.x рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирдП рд╕рдВрджрд░реНрдн рдПрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ
рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╣рдо рд╕реАрдПрд╕рдПрд╕-рдореЙрдбреНрдпреВрд▓ + рдЖрдЗрд╕реЛрдореЛрд░реНрдлрд┐рдХ-рд╕реНрдЯрд╛рдЗрд▓-рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╛рдж рд╡рд╛рд▓реЗ рдШрдЯрдХ рдореЗрдВ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдХреЛ рдбреЛрдо рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдПрдкреАрдЖрдИ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред

V15 рдореЗрдВ, рд╣рдо рдЙрди рдПрдкреАрдЖрдИ рдХреЛ рдкреБрд░рд╛рдиреЗ рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВ

    class MyComp extends Component {
        static contextTypes = {
                insertCss: PropTypes.func
           }
         ....
         componentWillMount () {
                // insert a style tag for this component
               this.removeCss = this.context.insertCss(myStyles)
         }
    }

V15 рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рдХрдВрдкреЛрдиреЗрдВрдЯрдорд╛рдЙрдВрдЯ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдШрдЯрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╣реА рд╢реИрд▓реА рдорд┐рд▓ рдЬрд╛рдПред

V16 рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдВрдкреЛрдиреЗрдВрдЯрдорд╛рдЙрдВрдЯ рдХреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд╕рдВрджрд░реНрдн.рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдШрдЯрдХ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХрд╣реЗрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛,

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

рдирд┐рд░реНрдорд╛рддрд╛ (рд╕рд╣рд╛рд░рд╛, рд╕рдВрджрд░реНрдн)

рдЗрд╕ рдЙрдкрдпреЛрдЧ (рдПрдХ 2 рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде) рдХреЛ рднреА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВрдиреЗ MyComp.contextType = StyleContext рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реБрдП рдирдП рд╕рдВрджрд░реНрдн рдПрдкреА рдХреА рдХреЛрд╢рд┐рд╢ рдХреА
рдлрд┐рд░ рднреА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЕрдкрд░рдВрдкрд░рд╛рдЧрдд рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред

    class MyComp extends Component {
        static contextType = StyleContext

         constructor (props) {
             super(props)
             console.log(this.context) // undefined
         }

    }

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

рдХреЛрдИ рд╕рд▓рд╛рд╣?

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

рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ v15.x рд╕реЗ v16.x рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирдП рд╕рдВрджрд░реНрдн рдПрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ
рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╣рдо рд╕реАрдПрд╕рдПрд╕-рдореЙрдбреНрдпреВрд▓ + рдЖрдЗрд╕реЛрдореЛрд░реНрдлрд┐рдХ-рд╕реНрдЯрд╛рдЗрд▓-рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╛рдж рд╡рд╛рд▓реЗ рдШрдЯрдХ рдореЗрдВ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдХреЛ рдбреЛрдо рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдПрдкреАрдЖрдИ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред

V15 рдореЗрдВ, рд╣рдо рдЙрди рдПрдкреАрдЖрдИ рдХреЛ рдкреБрд░рд╛рдиреЗ рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВ

    class MyComp extends Component {
        static contextTypes = {
                insertCss: PropTypes.func
           }
         ....
         componentWillMount () {
                // insert a style tag for this component
               this.removeCss = this.context.insertCss(myStyles)
         }
    }

V15 рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рдХрдВрдкреЛрдиреЗрдВрдЯрдорд╛рдЙрдВрдЯ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдШрдЯрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╣реА рд╢реИрд▓реА рдорд┐рд▓ рдЬрд╛рдПред

V16 рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдВрдкреЛрдиреЗрдВрдЯрдорд╛рдЙрдВрдЯ рдХреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд╕рдВрджрд░реНрдн.рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдШрдЯрдХ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХрд╣реЗрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛,

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

рдирд┐рд░реНрдорд╛рддрд╛ (рд╕рд╣рд╛рд░рд╛, рд╕рдВрджрд░реНрдн)

рдЗрд╕ рдЙрдкрдпреЛрдЧ (рдПрдХ 2 рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде) рдХреЛ рднреА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВрдиреЗ MyComp.contextType = StyleContext рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реБрдП рдирдП рд╕рдВрджрд░реНрдн рдПрдкреА рдХреА рдХреЛрд╢рд┐рд╢ рдХреА
рдлрд┐рд░ рднреА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЕрдкрд░рдВрдкрд░рд╛рдЧрдд рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред

    class MyComp extends Component {
        static contextType = StyleContext

         constructor (props) {
             super(props)
             console.log(this.context) // undefined
         }

    }

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

рдХреЛрдИ рд╕рд▓рд╛рд╣?

рдЖрдк рд╕рдВрджрд░реНрднрдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

class MyComponent extends React.Component {
   render(){
       const {
         //props including context props
       } = this.props;
       return(<View />);
   }
};

const withContext = () => (
  <MyContext.Consumer>
    { (contextProps) => (<MyComponent {...contextProps}/>)}
  </MyContext.Consumer>
);

export default withContext;

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

useContext ()

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

const context = useContext(yourContext)

MainComponent.Subcomponent = () => {
 const context = useContext(context)

  useEffect(()=> {
    console.log(context)
  })
}
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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