Javascript 添加CSS类以在fetch中更新时响应DOM元素
我正在组装一个加密货币应用程序作为实验,并从API中提取数据。我已经成功地让所有数据显示得很好,并且每两秒钟搜索一次价格变化,但是我想在价格变化时临时向更新的DOM元素添加一个类,如果价格下降,则为红色,如果价格上升,则为绿色。我目前正在映射API中的每个项,只希望将所需的类添加到DOM中更新的项(货币)中。不是所有的项目 请参阅下面我的代码:Javascript 添加CSS类以在fetch中更新时响应DOM元素,javascript,reactjs,api,dom,Javascript,Reactjs,Api,Dom,我正在组装一个加密货币应用程序作为实验,并从API中提取数据。我已经成功地让所有数据显示得很好,并且每两秒钟搜索一次价格变化,但是我想在价格变化时临时向更新的DOM元素添加一个类,如果价格下降,则为红色,如果价格上升,则为绿色。我目前正在映射API中的每个项,只希望将所需的类添加到DOM中更新的项(货币)中。不是所有的项目 请参阅下面我的代码: import React,{Component}来自“React”; 从“react router dom”导入{Link}; 导入“/home.sc
import React,{Component}来自“React”;
从“react router dom”导入{Link};
导入“/home.scss”;
类Home扩展组件{
//创建初始状态并传递道具
建造师(道具){
超级(道具);
此.state={
孤岛加载:是的,
硬币:[]
}
}
//自定义获取数据方法
fetchData(){
//获取数据
取('http://coincap.io/front')
//将响应转换为JSON
.then(response=>response.json())
//获取parsedJSON并记录结果
//为每个用户创建单个对象
.then(parsedJSON=>parsedJSON.map(coin=>(
{
long:`${coin.long}`,
short:`${coin.short}`,
价格:`${coin.price}`
}
)))
//用新联系人覆盖空阵列
//将数组设置为contacts状态,并将isLoading设置为false
.然后(硬币=>{
这是我的国家({
硬币,
孤岛加载:false
})
})
//抓住错误
.catch(错误=>console.log('解析失败',错误))
}
componentDidMount(){
设置间隔(()=>{
这是fetchData();
console.log('refreshed');
}, 2000);
}
render(){
const{isLoading,coins}=this.state;
返回(
{
!isLoading&&coins.length>0
?硬币。地图(硬币=>{
//销毁let变量中的每个项
让{long,short,price}=硬币;
返回(
名称:{long}
短:{Short}
价格:${Price}
观景币
);
})
:null}
);
}
}
导出默认主页代码>如果您制作了一个
组件,这样您就可以跟踪组件中的更改,从而将收到道具
并管理每个硬币的状态,这可能会更容易
试着这样做:
class Coin extends React.Component {
constructor(props) {
super(props);
this.state = {
color: grey,
};
}
componentWillReceiveProps(newProps) {
if (this.props.price > newProps.price) {
this.setState({ color: 'red' });
} else if (this.props.price < newProps.price) {
this.setState({ color: 'green' });
} else {
this.setState({ color: 'grey' });
}
}
render() {
const { long, short, price } = this.props;
return (
<div className={`panel__item ${this.state.color}`} key={short}>
<p>Name: {long}</p>
<p>Short: {short}</p>
<p>Price: ${price}</p>
<Link className="button" to={`/${short}`}>
View Coin
</Link>
</div>
);
}
}
class.Component{
建造师(道具){
超级(道具);
此.state={
颜色:灰色,
};
}
组件将接收道具(新道具){
如果(this.props.price>newProps.price){
this.setState({color:'red'});
}else if(this.props.price
短:{Short}
价格:${Price}
观景币
);
}
}
然后在映射中调用这个组件
并将变量作为道具传递。谢谢Max,我已经创建了一个新组件并传递了道具。似乎显示正确,但不幸的是,该类保持灰色,从未更改。我应该在父文件中运行componentWillReceiveProps吗?只是个主意。谢谢,我不知道你的意思。每当硬币收到新道具时,componentWillReceiveProps将自动调用。它应该在硬币部分中定义。如果这不起作用,请在console.log中记录newProps和this.props。看起来参数应该是nextProps而不是newProps(),我已经更改了这个,但仍然没有乐趣。控制台日志消息没有出现,这使我认为它没有被触发。参数的名称不应该有什么区别。您确定要将price变量作为道具传递给Coin吗?我使用了以下方法:我可以在控制台中看到dom更新,但没有日志消息。价值观似乎很好。