【问题标题】:React Star Rating Function: Image Not Displaying反应星级评分功能:图像不显示
【发布时间】: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


【解决方案1】:

尝试改变这个

"{require('./full-star.png')}"

{require('./full-star.png')}



"{require('./full-star.png')}" is executed as string. so its not fetching the image.

【讨论】:

    【解决方案2】:

    外部化 require 语句并将其用作变量。

    试试这个

      import React, { Component } from "react";
    
      class Starset0 extends Component {
    
        const fullStarSrc = require('./full-star.png');
        const emptyStarSrc = require('./empty-star.png');
    
        rate = event => {
          const { id } = event.target;
    
          console.log("You clicked: " + id);
          var i;
    
          for (i = 1; i <= 5; i++) {
            if(i <= parseInt(id)) {
              console.log("I should change the following: " + i);
              document.getElementById(i).setAttribute("src", 
      fullStarSrc);
            }
            else {
              console.log("I should change the following: " + i);
            document.getElementById(i).setAttribute("src", 
      emptyStarSrc);
            }
    
    
            //okay, so you've...kinda got it working...kind of
    
          }
    
        };
    
        render() {
          return (
    
            <div id="rating0">
              <img onClick={this.rate} class="star" id="1" src= 
     {emptyStarSrc} />
              <img onClick={this.rate} class="star" id="2" src= 
     {emptyStarSrc} />
              <img onClick={this.rate} class="star" id="3" src= 
     {emptyStarSrc} />
              <img onClick={this.rate} class="star" id="4" src= 
     {emptyStarSrc} />
              <img onClick={this.rate} class="star" id="5" src= 
     {this.emptyStarSrc} />
    
            </div>
    
          );
        }
      }
    
      export default Starset0;
    

    【讨论】:

    • 如果我这样做,它会调用变量“意外标记”
    • 实际上,如果我在“class Starset0 extends Component”之前初始化变量,我可以让它运行没有错误,但问题仍然完全一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 2018-09-24
    • 2018-03-22
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多