Как использовать условие if else в jsx?

class Wrapper extends React.Component {
  content() {
    if (this.props.isLoading) {
      return (
        <Layout>
            <Loader />
        </Layout>
      );
    } else if (this.props.isError) {
      return (
        <Layout>
          <Error errorMsg = {this.props.error} />
        </Layout>
      );
    } else {
      return (
        <Layout>
            {this.props.isSuccess ? <h1>success</h1> : <h1>some failure</h1>}
        </Layout>
      );
    }
  }

  render() {
    return this.content();
  }
}

export default Wrapper;
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

У меня есть приведенный выше код, здесь я использую макет во всех условиях, Фактический компонент <Layout> действительно тяжелый, поэтому я хочу использовать макет только один раз и попытаться переписать код примерно так, как показано ниже. но он не отображает ничего, кроме макета.

class Wrapper extends React.Component {
  content() {
  return (
        <Layout>
        {(()=>{
        if (this.props.isLoading) {
             <Loader />
           }else if (this.props.isError){
        
              <Error errorMsg = {this.props.error} />
              
                }else if (this.props.isSuccess){
              
               <h1>success</h1>
               
              }
              
        })()}
            
        </Layout>
      );
  }

  render() {
    return this.content();
  }
}

export default Wrapper;
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
79
3

Ответы 3

Поскольку вы забыли вернуть элементы, по умолчанию функция возвращает значение undefined. Вы определили iife, который не будет возвращать результат автоматически, вам нужно это сделать.

Напишите это так:

{(()=>{
    if (this.props.isLoading) {
        return <Loader />
    }else if (this.props.isError){
        return <Error errorMsg = {this.props.error} />
    }else if (this.props.isSuccess){  
        return <h1>success</h1>   
    }

})()}

Рассмотрим этот пример, чтобы сделать картину более ясной, в этом случае функция renderElement вернет undefined, и ничего не будет отрисовано.

render(){
    return (
        <div>
            {this.renderElement()}
        </div>
    )
}


// it will not return anything    
renderElement(){
    if (this.props.isLoading) {
        <Loader />
    }else if (this.props.isError){
        <Error errorMsg = {this.props.error} />
    }else if (this.props.isSuccess){  
        <h1>success</h1>   
    }
}

Как насчет этого?

class Wrapper extends React.Component {
    render() {
        return (
            <Layout>
                {this.props.loading &&
                    <Loader />
                }
                {this.props.error &&
                    <Error errorMsg = {this.props.error} />
                }
                {this.props.succes &&
                    <h1>success</h1>
                }
            </Layout>
        );
    }
}

export default Wrapper;
class Wrapper extends React.Component {

  render() {
   let content, message;

   this.props.error ? message = <Error errorMsg = {this.props.error}> : null
   this.props.success ? message =  <h1>success</h1> : null
   this.props.isLoading ? content = <Loader/> : content = message

   return (
      <Layout>
         {content}
      </Layout>
    )}
}

export default Wrapper;

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