Получение строки из другой функции в React

У меня есть класс, который обращается к API и возвращает значение в API:

import React from 'react';

class UserList extends React.Component {
    constructor(props) {
        super(props);

        this.state = { customer: [] };
    }

    componentDidMount() {

        fetch('https://surpriserecommenderapi.herokuapp.com/[email protected]', {
            method: "post",
            headers: {
                "Content-Type": "application/json"
            }
        }).then(response => {
            // *** Check for HTTP success
            if (!response.ok) {
                throw new Error(`HTTP error ${response.status}`);
            }
            // *** Read the body, parse it as JSON
            return response.json();
        })
        .then(({ prediction }) => this.setState({ customer: prediction }))
        .catch(error => {
            // ...*** handle/report error...
        });
    }

    render() {

        const customers = this.state.customer.map((item, i) => (
            <div>
                <h1>{item}</h1>
            </div>
        ));

        return (
            <div id = "layout-content" className = "layout-content-wrapper">
                <div className = "panel-list">{customers}</div>
            </div>
        );
    }
}

export default UserList;

{customers} возвращает строку «Рим» для отображения на веб-сайте. Я пытаюсь назвать это в App.js. Я могу вызвать UserList и отобразить «Рим», однако я хочу создать оператор if, который проверяет, какое значение отображается. Как это:

const recommended = <UserList></UserList>
console.info(recommended);

  const recommendedPackage = () => {
    if (recommended === "Roam in Rome"){
      return(
        <div>Recommended package: Roam in Rome</div>
      )
    } else {
      return(
        <div>No recommended package</div>
      )
    }
  }

Любая помощь будет оценена по достоинству!

Я правильно понимаю, вы пытаетесь сравнить компонент со строкой? <UserList></UserList> - это вызов React.createElement(), который является функцией, а не строкой.

tdranv 06.04.2021 14:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
17
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что вам следует реализовать необходимую логику в классе UserList с каким-то условным рендерингом. Может быть, что-то вроде:

class UserList extends React.Component {
  ...
  parseCustomers() {
    return (
      this.state.customers.map(item => {
        if (item === "Rome") {
          // logic here
        } else {
          // logic here
        }
      });
    );
  }

  render() {
    const customers = this.parseCustomers();
    return (
      ...
    );
  }
}

Большое спасибо, в этом есть смысл!

ajnabz 07.04.2021 15:55

Другие вопросы по теме