Запіс на курсы па HTML, CSS, JavaScript, PHP, Python, фрэймворкам і CMS,
а таксама: дапамога ў пошуку працы і заказаў, стажыроўка на рэальных праектах→
⊗jsrtPmCpPS 85 of 112 menu

Перадача стэйтаў у даччыныя кампаненты ў React

Няхай у нас дадзены масіў з прадуктамі:

const initProds = [ {id: id(), name: 'product1', cost: 100}, {id: id(), name: 'product2', cost: 200}, {id: id(), name: 'product3', cost: 300}, ];

Няхай гэты масіў размяшчаецца ў кампаненце Products. Запішам гэтыя прадукты ў стан кампанента:

function Products() { const [prods, setProds] = useState(initProds); }

Цяпер давайце перабярэм прадукты цыклам і вывядзем іх у якой-небудзь вёрстцы:

function Products() { const [prods, setProds] = useState(initProds); const items = prods.map(prod => { return <div key={prod.id}> name: <span>{prod.name}</span>, cost: <span>{prod.cost}</span> </div>; }); return <div> {items} </div>; }

Як вы бачыце, змесціва нашага цыкла map дастаткова складанае, асабліва калі вёрстка прадукта разрасцеся ў далейшым. Такая складанасць ускладняе чытанне, разуменне і падтрымку кода.

Будзе лепш вынесці код, які адказвае за адлюстраванне прадукта ў асобны кампанент. Назовем яго Product. Вось код нашага кампанента:

function Product({ name, cost }) { return <div> name: <span>{name}</span>, cost: <span>{cost}</span> </div>; }

Давайце цяпер унутры кампанента Products ў цыкле map будзем выкарыстоўваць даччыныя кампаненты Product:

function Products() { const [prods, setProds] = useState(initProds); const items = prods.map(prod => { return <Product key ={prod.id} name={prod.name} cost={prod.cost} />; }); return <div> {items} </div>; }

Як вы бачыце, цяпер код цыкла спрасціўся і стаў больш зразумелым для разумення. Акрамя таго, цяпер за адлюстраванне прадукта адказвае асобны кампанент, у якім мы можам рабіць, а потым рэдагаваць вёрстку прадуктаў.

Тэхнічна ў нас атрымліваецца, што бацькоўскі кампанент мае стэйт з данымі, а даччыныя кампаненты атрымліваюць гэтыя даныя ў выглядзе пропсаў і адлюстроўваюць іх патрэбным нам чынам.

У стэйце кампанента Users дадзены наступны масіў:

const initUsers = [ {id: id(), name: 'user1', surname: 'surn1', age: 30}, {id: id(), name: 'user2', surname: 'surn2', age: 31}, {id: id(), name: 'user3', surname: 'surn3', age: 32}, ];

Перабярыце гэты масіў цыклам і выведзіце ўсіх юзераў на экран. Стварыце для адлюстравання юзера асобны кампанент User.

byenru