У вас есть вопрос о методе React with map

#reactjs

Вопрос:

Сейчас я изучаю реакцию. У меня есть вопрос о методе отображения. Есть ли какие-либо различия между productName1 и productName2? (кроме части li)

 const productName1 = arr.map(a =><li>{a.name}</li> );
const productName2 = arr.map(a =>a.name );
 

Спасибо.

     const arr = Data;
    
    // console.log(arr);
    
    const productName1 = arr.map(a =><li>{a.name}</li> );
    const productName2 = arr.map(a =>a.name );

    console.log(productImage);

    return (
        <div className="contents">   
        <h1>Please Select Products</h1>      
            <h3>{productName1}</h3>
            <h3>{productName2}</h3>
        </div>
    )
}

export default ProductData
 

Комментарии:

1. Как вы ожидаете, что они будут такими же?

Ответ №1:

Да, они разные, если предположить, что ваш массив выглядит примерно так:

 const arr = [
  {name: "John"},
  {name: "Jane"},
  {name: "Jim"}
]
 

Создание html-кода в productName1 выглядит примерно так:

 <h3>
 <li>John</li>
 <li>Jane</li>
 <li>Jim</li>
</h3>
 

Который в react эквивалентен массиву JSX.Element, который набран как этот JSX.Element[]

В то время как результат productName2 будет таким:

 <h3>JohnJaneJim</h3>
 

Который представляет собой всего лишь строковый массив, который будет набран следующим образом: строка[]

Таким образом, в основном в productName1 вы создаете элементы тегов li, которые содержат имя, которое создает недопустимый html, поскольку вам нужно завернуть элементы li внутрь и тег ol или тег ul. productName2 генерирует только массив строк, которые будут сопоставлены внутри h3

Комментарии:

1. Спасибо вам за ваш ответ. Так неужели между ними нет никакой разницы, кроме той части, которую вы имеете в виду? Потому что я понятия не имею об arr.map(a =>a.name ) и арр.карта(a =>>{a.name}). На мой взгляд, это похоже на реквизит с {} Спасибо!

2. Нет, есть большая разница, один возвращает массив JSX.Element, а другой-массив строк. arr.map(a =>{a.name}) это вернет неопределенный массив, потому что это функция со стрелкой, у которой нет оператора return, это arr.map(a =>>a.name ) возвращает массив строк, потому что это сокращение стрелки, поэтому в нем есть оператор return. @Девон