πŸ–₯ Π Π°Π±ΠΎΡ‚Π° с коллСкциями Π² JSX



⏩В Ρ€Π°Π±ΠΎΡ‚Π΅ с коллСкциями элСмСнтов Π² JSX ΠΏΠΎ большСй части Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ особСнного.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π·Π°Π΄Π°Ρ‡Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ списков элСмСнтов Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ частая, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ лишним Π΅Ρ‘ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.



⏩На скринС ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ коллСкция гСнСрируСтся прямо Π² Ρ‚ΠΎΠΌ мСстС, ΠΊΡƒΠ΄Π° ΠΈ подставляСтся. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ снова ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΡŒ JSX Ρ‡Π΅Ρ€Π΅Π· {} Π²Π»ΠΎΠΆΠ΅Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΏΡΡ‚ΡŒ появляСтся JSX-ΠΊΠΎΠ΄. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, рСкурсия Π½Π° этом заканчиваСтся. Если Π½ΡƒΠΆΠ½Π° Π±ΠΎΠ»Π΅Π΅ слоТная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл вынСсти Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ render. НапримСр, Π½ΠΈΠΆΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° функция renderList(), которая Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ список для отрисовки:

class List extends React.Component {

renderList = (data) => {

return data.map(item => <li>{item.name}</li>);

}



render() {

const { data } = this.props;



return (

<ul>

{this.renderList(data)}

</ul>

);

}

}




β©ΠŸΡ€ΠΎΠΏ key

Для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности, React Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ строку ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Бвязано это с ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ измСнСния Π² DOM.

ГСнСрируя ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ элСмСнтов Π² JSX, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠΏ key, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ мСняСтся ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.



⏩ЧащС всСго с этой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ любой сущности, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ, Π΅ΡΡ‚ΡŒ свой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, primary key ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…).

class List extends React.Component {

render() {

const { data } = this.props;



return (

<ul>

{data.map((item) => <li key={item.id}>{item.name}</li>)}

</ul>

);

}

}



const items = [

{ name: 'first', id: 1 },

{ name: 'second', id: 2 }

];



const mountNode = document.getElementById('react-root');

const root = ReactDOM.createRoot(mountNode);

root.render(<List data={items} />);




πŸ“Ž Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅



@react_tg