简体   繁体   English

如何使用三元运算符的3种条件从github api中获取数据?

[英]how to use ternary operator for 3 conditions for fetching data from github api?

I am trying to use ternary operators for 3 condition. 我正在尝试为3个条件使用三元运算符。 I am getting data from github api using axios. 我正在使用axios从github api获取数据。 First one isFetching it is used for fetching the data in which I will show a loading screen second one is used when the data is shown and the third one will be used to show an error message. 第一个是isFetching,它用于获取数据,其中将显示一个加载屏幕,第二个是在显示数据时使用,第三个将用于显示错误消息。 I don't know how to put this in ternary operator or is there any other mistake I am doing ? 我不知道如何将其放在三元运算符中,或者我在执行其他任何错误?

Body.js Body.js

import React, {Component} from 'react';
import {connect} from 'react-redux';
import 'bootstrap/dist/css/bootstrap.css';

class Body extends Component{

render(){
    const { user, isFetching, error } =this.props;
    return(
        <div>
            {user.map((item,key) => {
                return (
                    <div key={key} className="card" >
                        <img className="card-img-top" src={item.data.avatar_url} alt="Card image cap"/>
                        <div className="card-body">
                            <h5 className="card-title">{item.data.name}</h5>
                            <p className="card-text">{item.data.bio}</p>
                        </div>
                        <ul className="list-group list-group-flush">
                            <li className="list-group-item">{item.data.email}</li>
                            <li className="list-group-item">{item.data.location}</li>
                            <li className="list-group-item">{item.data.followers}</li>
                        </ul>
                        <div className="card-body">
                            <a href={item.url} className="card-link">Profile</a>
                        </div>
                    </div>
                )
            })}

        </div>
);
}
}
function mapStateToProps(state) {
    return{
        user: state.user.user,
        isFetching: state.user.isFetching,
        error: state.user.error
    }
}



export default connect(mapStateToProps) (Body);

A nested ternary operator is not very readable. 嵌套三元运算符不是很可读。 However it would look like 但是它看起来像

{isFetching? <Loading /> : error ?  <Error />: <Data />}

However you should make use of if statements to make it more readable 但是,您应该利用if语句使其更具可读性

render(){
    const { user, isFetching, error } =this.props;
    if (isFetching) {
       return <div> Loading ... </div>
    }
    if (error) {
       return <div> Error </div>
    }
    return(
        <div>
            {user.map((item,key) => {
                return (
                    <div key={key} className="card" >
                        <img className="card-img-top" src={item.data.avatar_url} alt="Card image cap"/>
                        <div className="card-body">
                            <h5 className="card-title">{item.data.name}</h5>
                            <p className="card-text">{item.data.bio}</p>
                        </div>
                        <ul className="list-group list-group-flush">
                            <li className="list-group-item">{item.data.email}</li>
                            <li className="list-group-item">{item.data.location}</li>
                            <li className="list-group-item">{item.data.followers}</li>
                        </ul>
                        <div className="card-body">
                            <a href={item.url} className="card-link">Profile</a>
                        </div>
                    </div>
                )
            })}

        </div>
    );
  }
}

To ease complex conditioning in the JSX you can always use : https://www.npmjs.com/package/jsx-control-statements . 为了减轻JSX中的复杂条件,您始终可以使用: https : //www.npmjs.com/package/jsx-control-statements With that you can simply write your code like this: 这样,您可以像这样简单地编写代码:

class Body extends Component {

  render() {
    const { user, isFetching, error } = this.props;
    return (
      <div>
        <For each="item" index="idx" of={this.props.items}>
          <Choose>
            <When condition={isFetching}>
              <div key={idx} className="card" >Loading</div>
            </When>
            <When condition={!isFetching}>
              <div key={idx} className="card" >Some data2</div>
            </When>
            <Otherwise>
              <div key={idx} className="card" >Some error</div>
            </Otherwise>
          </Choose>

        </For>
      </div>
    )
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM