【发布时间】:2018-01-23 12:42:00
【问题描述】:
我正在创建一个反应应用程序,并且我有一个或多或少定义如下的组件:
import React, { Component } from 'react';
import axios from 'axios';
import './App.css';
class App extends Component {
constructor(props) {
super(props);
this.state = {
data: [],
loading: true,
error: null
};
}
componentDidMount() {
var _this = this;
this.serverRequest =
axios
.get("LinkToAPI")
.then(result => {
_this.setState({
data: result.data,
loading: false,
error: null
});
})
.catch(err => {
_this.setState({
loading: false,
error: err
});
});
}
componentWillUnmount() {
this.serverRequest.abort();
}
renderLoading() {
return <div>Loading...</div>
}
renderError() {
return (
<div>
Something when wrong: {this.state.error.message}
</div>
);
}
renderData() {
const { error, data} = this.state;
if (error) {
return this.renderError();
}
return (
<div>
{data.map(d=> {
if (d.imageUrl) {
<div className="dataDiv" style="background: url('{d.imageUrl}')" key={d.Id}>{d.name}</div>
} else {
<div className="dataDiv" style="background: url('LinkToSomeImage')" key={d.Id}>{d.name}</div>
}
}
)}
</div>
)
}
render() {
return (
<div className="App">
{this.props.loading ? this.renderLoading() : this.renderData()}
</div>
);
}
}
它基本上从 API 获取 JSON 数据,并使用它呈现一些带有 JSON 内数据的 div。我正在申请包含 dataDiv 类数据的 div,该类在我的 App.css 文件中定义。此外,我想为 div 设置背景图像。我到底想要做的是,如果数据条目包含一个名为imageUrl 的字段,我想将该 url 用作背景图像的 url,否则,如果它为 null 或空,我想使用默认 url我从网上找到的。在 React 中处理这个问题的正确方法是什么?上面的代码段似乎不起作用,尤其是 renderData 函数中的 if-else 语句。我该如何修复这段代码,或者有什么方法可以更优雅地处理这个问题,可能在 CSS 中?
【问题讨论】:
-
可以设置类名,映射到特定的
background-url,或者直接在元素上设置{background-url: 'url'} -
@DanielLizik 但是,我基本上是从 API 获取 url。我该怎么做?
-
<div style={{backgroundUrl: this.state.url}}> -
@DanielLizik 好的,谢谢。以及您建议如何处理 return 语句中的 if-else 部分,因为它是给我错误的主要部分。
-
返回一个没有样式的不同组件
标签: javascript css reactjs