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

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдЬреБрд▓ре░ 2015  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/react

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

рдкреНрд░реЛрдк рддрддреНрд╡ рдХреЛ React.cloneElement рд╕рд╛рде рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рд╛рдкрддрд╛ рдкреНрд░реЛрдк рдХреА рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓рдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереАред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмрдврд╝рдд рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ...

https://jsfiddle.net/kdsvgbzu/1/

<A name="name" value="value">
    <B></B>
</A>
class A extends React.Component {
    render() {
        return (
            <div>
                {React.Children.map(this.props.children, function(child) {
                    return React.cloneElement(child, {
                        name: this.props.name,
                        value: this.props.value
                    });
                }, this)}
            </div>
        );
    }
}

A.propTypes = {
    name: PropTypes.string.isRequired,
    value: PropTypes.string.isRequired
};

class B extends React.Component {
    render() {
        return <span>{this.props.name} : {this.props.value}</span>;
    }
}

B.propTypes = {
    name: PropTypes.string.isRequired,
    value: PropTypes.string.isRequired
};

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

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдкрдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ @tleunen рдХреНрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП рдареЛрдХрд░ рдЦрд╛рдИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рд╕рд╣рд╛рд░рд╛ рджреЗрдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдереА:

ReactDOM.render(
   <NumberSelector>
    <ComponentRequiringTheNumber />
  </NumberSelector>
)

рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓рд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реИ:

ReactDOM.render(
   <NumberSelector>
    {({number}) => <ComponentRequiringTheNumber number={number} />}
  </NumberSelector>
)

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

рдЖрдкрдХреЗ рдлрд┐рдбрд▓ рдкрд░ рд▓рд╛рдЧреВ: https://jsfiddle.net/ap1e9rk3/1/

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

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

рдмрд┐рд▓реНрдХреБрд▓ рдпрд╣реА рдореИрдиреЗ рд╕реЛрдЪрд╛ред рдзрдиреНрдпрд╡рд╛рдж @spicyj

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдкрдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ @tleunen рдХреНрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП рдареЛрдХрд░ рдЦрд╛рдИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рд╕рд╣рд╛рд░рд╛ рджреЗрдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдереА:

ReactDOM.render(
   <NumberSelector>
    <ComponentRequiringTheNumber />
  </NumberSelector>
)

рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓рд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реИ:

ReactDOM.render(
   <NumberSelector>
    {({number}) => <ComponentRequiringTheNumber number={number} />}
  </NumberSelector>
)

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

рдЖрдкрдХреЗ рдлрд┐рдбрд▓ рдкрд░ рд▓рд╛рдЧреВ: https://jsfiddle.net/ap1e9rk3/1/

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

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

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

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

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

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

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