React: ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹, прСдоставлСнныС с cloneElement, ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² консоли

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 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 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π­Ρ‚ΠΎ сдСлано Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ; ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° свойств Π²ΠΎ врСмя создания элСмСнта ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ошибкам. Он Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ соотвСтствуСт повСдСнию систСм статичСского Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Flow. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ всСго просто ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ эти Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ context, которая прСдоставит Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ способ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ свойств ΠΎΡ‚ родитСля, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ A, ΠΊ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌΡƒ элСмСнту, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ B.

Π­Ρ‚ΠΎ Ρ‚ΠΎ, ΠΎ Ρ‡Π΅ΠΌ я Π΄ΡƒΠΌΠ°Π». Бпасибо @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 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ