Выполнение операций условного рендеринга с отображенными данными — Реакция

#javascript #reactjs

#javascript #reactjs

Вопрос:

Я сопоставляю данные в возвращенном рендеринге, но затем я хочу выполнить условие для данных, которые были сопоставлены… Возможно ли сделать что-то подобное?

 export default function App() {
  const prod = [
    {'name': '1'},
    {'name': '2'},
    {'name': '3'}
  ];

  return (
    <div className="App">
      {prod amp;amp; (
        <div>
          {prod.map(p => (

            // This is the point I get an error
            {p.name === '1' amp;amp; (
              <h1>This is 1</h1>
            )}

          ))}
        </div>
      )}
    </div>
  );
}
 

В настоящее время я получаю сообщение об ошибке:

 Unexpected token, expected "," (16:14)

  14 |         <div>
  15 |           {prod.map(p => (
> 16 |             {p.name === '1' amp;amp; (
     |               ^
 

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

1. попробуйте с этим {p.name === '1' ? (<h1>This is 1</h1>): <></>}

2. Удалите фигурные скобки вокруг p.name amp;amp; ... —> {prod.map((p) => p.name === "1" amp;amp; <h1>This is 1</h1>)}</div>

Ответ №1:

Функции со стрелками с форматом x => () возвращают содержимое скобок.

Таким образом, вы возвращаете то, что компилятор считает объектом, поскольку оно заключено в фигурные скобки x => ({ ... }) Вам нужно удалить фигурные скобки:

 prod.map(p => (
    p.name === '1' amp;amp; <h1>This is 1</h1>
)
 

Или явно возвращает значение:

 prod.map(p => {
    return p.name === '1' amp;amp; <h1>This is 1</h1>
}
 

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

1. Потрясающе. Я знал, что было что-то очевидное, чего мне не хватало!

Ответ №2:

Если вы хотите сопоставить данные для какого-либо конкретного индекса, вы можете проверить это.

 <div>
    {prod.map(p => p.name === '1' amp;amp; <h1>Conditionally Mapped</h1> || <h1>Normally mapped</h1>}
</div>

// similar to the previous one

<div>
    {prod.map(p => {
      if(p.name === '1') return <h1>Conditionally Mapped</h1>
      else return <h1>Normally mapped</h1>
    }

</div>