【发布时间】:2018-07-12 16:07:20
【问题描述】:
向那些花费时间和精力回答我之前的问题的人致以诚挚的歉意。我最初认为我不会得到帮助,所以我开始自己研究它。我已经走了很远,所以我宁愿不从头开始重建我所做的事情。
这个反应组件是一排星星。当用户点击一个星星时,它和之前所有的星星都会从空变成满。如果单击星号 2,星号 1 和星号 2 都会变满,等等。这几乎可以工作。这是我的代码:
import React, { Component } from "react";
class Starset0 extends Component {
rate = event => {
const {id} = event.target;
console.log("You clicked: " + id);
var i;
for (i = 1; i < parseFloat(id) + 1; i++) {
console.log("I should change the following: " + i);
document.getElementById(i).setAttribute("src", "{require('./full-star.png')}");
//okay, so you've...kinda got it working...kind of
}
};
render() {
return (
<div id = "rating0">
<img onClick = {this.rate} class = "star" id = "1" src = {require('./empty-star.png')} />
<img onClick = {this.rate} class = "star" id = "2" src = {require('./empty-star.png')} />
<img onClick = {this.rate} class = "star" id = "3" src = {require('./empty-star.png')} />
<img onClick = {this.rate} class = "star" id = "4" src = {require('./empty-star.png')}/>
<img onClick = {this.rate} class = "star" id = "5" src = {require('./empty-star.png')}/>
</div>
);
}
}
export default Starset0;
问题是,星星并没有变满,它们只是停止渲染。它们被替换为该图像未找到图标。为什么是这样?如果我手动替换源属性,它会显示满星。
【问题讨论】:
-
使用
state。创建一个由 5 个布尔值组成的数组,最初都设置为false。当一个星被点击时,从被点击的星的索引开始,返回到第一个项目并将值设置为true然后setState。现在,您可能还想将此数组的每个项目与每个星形挂钩,以确定是否要在 在渲染方法中显示/隐藏它。
标签: javascript jquery html reactjs image