[英]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.