Size: a a a

React: русскоязычное сообщество

2019 December 23

KS

Konstantin Sidorov in React: русскоязычное сообщество
`
const products = [
 {
   id: 0,
   image: '/path/to/image.jpg',
   name: 'Shoes',
   cost: 543,
   seller: 'Wo Duy'
 },
 {
  id : 1,
   image: '/path/to/image.jpg',
   name: 'Boots',
   cost: 124,
   seller: 'Tu Ming'
 },
 {
   id: 2,
   image: '/path/to/image.jpg',
   name: 'hat
   cost: 30
   seller: 'Che Sung'
 },
]

<div>
 {products.map(({id, image, name, cost, seller}, idx) => (
    <div key={id} className="grid">
       {!(idx % 4) ? (
         <div className="grid">
           <img src={image} alt={name} />
           <div className="list">{name}</div>
           <div className="list">{cost}</div>
           <div className="list">{seller}</div>
         </div>
       ) : (
       <div className="block">
         <div className="list">{name}</div>
         <div className="list">{cost}</div>
         <div className="list">{seller}</div>
       </div>
       )}
    </div>
  ))}
</div>
`
источник

VD

Viktar Daniliuk in React: русскоязычное сообщество
Naimjon Yunusov
как можно решить этот вопрос тогда?
{items.map((value, key, array) => {
  return (
     {key % 3 === 0 &&
     (<div class="grid">grid</div>
      <div class="block">
         {array.slice(key, key + 3).map((val, i) => {
             return <div class="list" key={i}>{val}</div>
             })
          }</div>
          )}
      )
})}

Попробуй так
источник

A

Aleksandr in React: русскоязычное сообщество
А не вариант это на два компонента разбить?
источник

VD

Viktar Daniliuk in React: русскоязычное сообщество
Aleksandr
А не вариант это на два компонента разбить?
У него наверное в разметке косяк, массив с товарами приходит большой, а на экран выводятся блоки, в каждом из которых по три элемента этого большого массива и в добавок блоки между собой разделены дополнительным дивом.

Подумать над разметкой и компоненты плодить не придется
источник

A

Aleksandr in React: русскоязычное сообщество
ну большой компонент и один маленький с 1-3 позициями, все это в диве.
источник

I

Irakliy in React: русскоязычное сообщество
голосую за разбиение на компоненты, чем сильнее дробление - тем лучше
источник

NY

Naimjon Yunusov in React: русскоязычное сообщество
Viktar Daniliuk
{items.map((value, key, array) => {
  return (
     {key % 3 === 0 &&
     (<div class="grid">grid</div>
      <div class="block">
         {array.slice(key, key + 3).map((val, i) => {
             return <div class="list" key={i}>{val}</div>
             })
          }</div>
          )}
      )
})}

Попробуй так
ваууу магический работает, спасибо, но есть косяк, почему в list попадает товары из grid т,е grid дублируется.
источник

NY

Naimjon Yunusov in React: русскоязычное сообщество
Viktar Daniliuk
У него наверное в разметке косяк, массив с товарами приходит большой, а на экран выводятся блоки, в каждом из которых по три элемента этого большого массива и в добавок блоки между собой разделены дополнительным дивом.

Подумать над разметкой и компоненты плодить не придется
источник

A

Aleksandr in React: русскоязычное сообщество
items.map((value, key, array) =>{
   if (value%4 === 0)
   {
      return(<BigImageComponent params/>)
   }
   if(value%3 === 0)
   {
      return( <SmallImageComponent params[key] params[key-1] params[key-2]/>)
   }
}
источник

VD

Viktar Daniliuk in React: русскоязычное сообщество
Naimjon Yunusov
ваууу магический работает, спасибо, но есть косяк, почему в list попадает товары из grid т,е grid дублируется.
Сложно сказать, я на телефоне пишу, может скобку не там поставил
Надо подумать
источник

A

Aleksandr in React: русскоязычное сообщество
Naimjon Yunusov
ваууу магический работает, спасибо, но есть косяк, почему в list попадает товары из grid т,е grid дублируется.
key+1
источник

A

Aleksandr in React: русскоязычное сообщество
{items.map((value, key, array) => {
  return (
     {key % 3 === 0 &&
     (<div class="grid">grid</div>
      <div class="block">
         {array.slice(key+1, key + 4).map((val, i) => {
             return <div class="list" key={i}>{val}</div>
             })
          }</div>
          )}
      )
})}
источник

A

Aleksandr in React: русскоязычное сообщество
вот так
источник

VD

Viktar Daniliuk in React: русскоязычное сообщество
Aleksandr
items.map((value, key, array) =>{
   if (value%4 === 0)
   {
      return(<BigImageComponent params/>)
   }
   if(value%3 === 0)
   {
      return( <SmallImageComponent params[key] params[key-1] params[key-2]/>)
   }
}
Не будет работать
источник

A

Aleksandr in React: русскоязычное сообщество
Viktar Daniliuk
Не будет работать
дап, ты прав, но общая идея думаю понятна. var new_array =items.map((value, key, array) =>{
   if (value%4 === 0)
   {
      return(<BigImageComponent params/>)
   }
   if(value%3 === 0)
   {
      return( <SmallImageComponent params[key] params[key-1] params[key-2]/>)
   }
}
return new_array
источник

A

Aleksandr in React: русскоязычное сообщество
вот так будет
источник

NY

Naimjon Yunusov in React: русскоязычное сообщество
Спасибо вам работает:
источник

NY

Naimjon Yunusov in React: русскоязычное сообщество
Aleksandr
{items.map((value, key, array) => {
  return (
     {key % 3 === 0 &&
     (<div class="grid">grid</div>
      <div class="block">
         {array.slice(key+1, key + 4).map((val, i) => {
             return <div class="list" key={i}>{val}</div>
             })
          }</div>
          )}
      )
})}
источник

A

Aleksandr in React: русскоязычное сообщество
ну
источник

A

Aleksandr in React: русскоязычное сообщество
?
источник