рдореИрдВрдиреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рд░реВрдк рд╕реЗ "рд▓рд╛рдкрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЛрдк" рдХреЗ рдХрд╛рд░рдг рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИред
рдкреНрд░реЛрдк рддрддреНрд╡ рдХреЛ 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
};
рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ; рддрддреНрд╡ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред рдпрд╣ рдлреНрд▓реЛ рдЬреИрд╕реЗ рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рднреА рдЕрдзрд┐рдХ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдЕрднреА рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЙрди рдкреНрд░реЙрдкреНрд╕ рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рдлреАрдЪрд░ рднреА рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╕рдВрджрд░реНрдн рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдЬреИрд╕реЗ рдП рд╕реЗ рдмреА рдЬреИрд╕реЗ рдмрдЪреНрдЪреЗ рдХреЛ рдкреНрд░реЛрдк рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рд╕рдорд░реНрдерд┐рдд рддрд░реАрдХрд╛ рджреЗрдЧрд╛ред
рдмрд┐рд▓реНрдХреБрд▓ рдпрд╣реА рдореИрдиреЗ рд╕реЛрдЪрд╛ред рдзрдиреНрдпрд╡рд╛рдж @spicyj
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдкрдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ @tleunen рдХреНрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП рдареЛрдХрд░ рдЦрд╛рдИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рд╕рд╣рд╛рд░рд╛ рджреЗрдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдереА:
ReactDOM.render(
<NumberSelector>
<ComponentRequiringTheNumber />
</NumberSelector>
)
рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓рд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реИ:
ReactDOM.render(
<NumberSelector>
{({number}) => <ComponentRequiringTheNumber number={number} />}
</NumberSelector>
)
рдореБрдЭреЗ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ ComponentRequiringTheNumber
рдХреА рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдФрд░ NumberSelector
рдХреА рднреВрдорд┐рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдФрд░ рдЗрд╕ рддрд░рд╣, рдиреЗрд╕реНрдЯреЗрдб рдШрдЯрдХ рдХреЛ рджрд┐рдП рдЧрдП рдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рддрднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛред
рдЖрдкрдХреЗ рдлрд┐рдбрд▓ рдкрд░ рд▓рд╛рдЧреВ: https://jsfiddle.net/ap1e9rk3/1/
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдкрдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ @tleunen рдХреНрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП рдареЛрдХрд░ рдЦрд╛рдИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рд╕рд╣рд╛рд░рд╛ рджреЗрдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдереА:
рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓рд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реИ:
рдореБрдЭреЗ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐
ComponentRequiringTheNumber
рдХреА рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдФрд░NumberSelector
рдХреА рднреВрдорд┐рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдФрд░ рдЗрд╕ рддрд░рд╣, рдиреЗрд╕реНрдЯреЗрдб рдШрдЯрдХ рдХреЛ рджрд┐рдП рдЧрдП рдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рддрднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛредрдЖрдкрдХреЗ рдлрд┐рдбрд▓ рдкрд░ рд▓рд╛рдЧреВ: https://jsfiddle.net/ap1e9rk3/1/