Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 动态更改颜色_Reactjs - Fatal编程技术网

Reactjs 动态更改颜色

Reactjs 动态更改颜色,reactjs,Reactjs,好吧,我还没有反应过来,所以这是我的问题。。。。我确实成功地动态渲染了5个球组件,我想要实现的是,每次单击球时,球都会改变颜色并保持这种状态,直到再次单击球时,球会恢复为默认颜色。也可以更改多个球的颜色,例如更改1 3 5的颜色,但再次单击时会恢复默认颜色。。。有什么想法吗 .Ball { width: 40px; height: 40px; text-align: center; line-height: 40px; color: #3d3c3a;

好吧,我还没有反应过来,所以这是我的问题。。。。我确实成功地动态渲染了5个球组件,我想要实现的是,每次单击球时,球都会改变颜色并保持这种状态,直到再次单击球时,球会恢复为默认颜色。也可以更改多个球的颜色,例如更改1 3 5的颜色,但再次单击时会恢复默认颜色。。。有什么想法吗

.Ball {
    width: 40px;
    height: 40px;
    text-align: center;
    line-height: 40px;
    color: #3d3c3a;
    border-radius: 100%;
    float: left;
    background-color: #fff;
    margin: 20px;
    font-weight: 500;
    box-shadow: 1px 1px 0.5px #000;
    align-items: center;
    cursor: pointer
}

 const balls = props => {
  return (
    <Aux>
      <p className={classes.Ball} id={props.id} onClick={props.clicked}>
        {props.number}
      </p>
    </Aux>
  );
};

class Game extends Component {
  state = {
    ids: [
      { id: 1 },
      { id: 2 },
      { id: 3 },
      { id: 4 },
      { id: 5 }
    ],
    chosenBallsIds: []
  };



  clickedBallHandler = ballIndex => {
    let chosenBallsIds = this.state.chosenBallsIds;
    if (chosenBallsIds.includes(ballIndex)) {
      let index = chosenBallsIds.indexOf(ballIndex);
      if (index > -1) {
        chosenBallsIds.splice(index, 1);
      }
    } else {
      chosenBallsIds.push(ballIndex);
    }

    if (chosenBallsIds.length >= 9) {
      chosenBallsIds.pop();
    }

    chosenBallsIds.sort(function(a, b) {
      return a - b;
    });

    this.setState({
      chosenBallsIds: chosenBallsIds
    });

  };


  render() {
    let balls = null;
    balls = (
      <div>
        {this.state.ids.map((ball, index) => {
          return (
            <Balls
              key={ball.id}
              number={ball.id}
              clicked={() => this.clickedBallHandler(index + 1)}
              id={index + 1}
            />
          );
        })}
      </div>
    );


    return (
      <Aux>
        <div className={classes.Balls}>{balls}</div>
      </Aux>
    );
  }
}

export default Game;
.Ball{
宽度:40px;
高度:40px;
文本对齐:居中;
线高:40px;
颜色:#3d3c3a;
边界半径:100%;
浮动:左;
背景色:#fff;
利润率:20px;
字号:500;
盒影:1px 1px 0.5px#000;
对齐项目:居中;
光标:指针
}
常量球=道具=>{
返回(

{props.number}

); }; 类游戏扩展组件{ 状态={ ID:[ {id:1}, {id:2}, {id:3}, {id:4}, {id:5} ], chosenBallsIds:[] }; clickedBallHandler=ballIndex=>{ 让chosenBallsIds=this.state.chosenBallsIds; if(chosenBallsIds.includes(ballIndex)){ let index=chosenBallsIds.indexOf(ballIndex); 如果(索引>-1){ chosenBallsIds.拼接(索引1); } }否则{ chosenBallsIds.push(球指数); } 如果(chosenBallsIds.length>=9){ chosenBallsIds.pop(); } chosenBallsIds.sort(函数(a,b){ 返回a-b; }); 这是我的国家({ chosenBallsIds:chosenBallsIds }); }; render(){ 设balls=null; 球=( {this.state.ids.map((球,索引)=>{ 返回( this.clickedBallHandler(索引+1)} id={index+1} /> ); })} ); 返回( {balls} ); } } 出口违约博弈;
您可能需要查看。这将允许您为每次单击设置不同的背景色。另外,我将研究设置十六进制颜色数组,然后当用户单击时,您可以根据需要将状态设置为数组中的新项。您的if语句很复杂,可能不需要

你找到解决方案了吗?嘿,不,我没有找到任何解决方案…在同一个应用程序中做了一大堆其他的事情,它几乎完成了,只是这个。。。我仍在寻找解决办法。因此,我在render方法中使用.map生成每个球,并将每个单击的球保存在chosenBallsIds数组中,但如何为球着色,这一点并没有引起任何注意。。。还有什么帮助吗?你看过我关于css动态属性的帖子了吗?您可以使用动态字符串,传入不同于您所在州的值,并从您所在州的十六进制值数组中传递值。您的样式类似于style={{{
background color:#${this.state.hex}
}