Реагировать - случайный цвет фона для каждого элемента цикла - PullRequest
0 голосов
/ 07 декабря 2018

Я делаю «игру с угадыванием цвета», используя Reactjs, и у меня возникают некоторые проблемы с назначением случайного цвета фона для каждого квадрата.Поэтому, когда я делаю цикл for, чтобы показать 6 квадратов и пропускаю цветовые реквизиты, он дает одинаковый цвет всем квадратам, а не случайный цвет каждому квадрату ... Заранее спасибо!

Этомой компонент приложения:

import React, { Component } from 'react';
import './App.css';

import SquaresContainer from './containers/SquaresContainer/SquaresContainer';


class App extends Component {

  constructor() {
    super();
    this.state = {
      correctColor: undefined,
      rgbDisplay: '',
      colorSquares: undefined
    }
  }

  generateRandomColor() {
    let r = Math.round((Math.random() * 255)); //red 0 to 255
    let g = Math.round((Math.random() * 255)); //green 0 to 255
    let b = Math.round((Math.random() * 255)); //blue 0 to 255
    return 'rgb(' + r + ', ' + g + ', ' + b + ')';
  };



  componentDidMount() {
    let correctColor = this.generateRandomColor();
    let colorSquares = this.generateRandomColor();

    this.setState({
      correctColor: correctColor,
      rgbDisplay: correctColor,
      colorSquares: colorSquares
    })
  };


  render() {

    return (

      <div id="game">

        {/* HEADER */}
        <div id="header" className="header">
          <h1 className="header__elem">THE GREAT
              <br />
            <span id="rgbDisplay">
              {this.state.rgbDisplay}
            </span>
            <br />
            GUESSING GAME
              <br />
            <span id="author">by Ana Fig</span>
            <br />
            <span id="language">REACT</span>
          </h1>
        </div>
        {/* / HEADER */}

        {/* MENU BUTTONS */}
        <div id="menu">
          <div>
            <button id="newColorButton">NEW COLORS</button>
          </div>
          <span id="message"></span>
          <div>
            <button className="easyMode">EASY</button>
            <button className="hardMode selected">HARD</button>
          </div>
        </div>
        {/* / MENU BUTTONS */}

        {/* SQUARES COMPONENT */}
        <SquaresContainer color={this.generateRandomColor()} />
        {/* / SQUARES COMPONENT */}


      </div>
    );
  }
}

export default App;

Это мой компонент SquaresContainer:

import React, { Component } from 'react';

import './SquaresContainer.css';

import Square from '../../components/Square/Square';


class SquaresContainer extends Component {

  constructor(props) {
    super(props);
    this.state = {
      squares: 6
    }
  }
  createSquares = () => {
    let squares = [];
    for (let i = 0; i < this.state.squares; i++) {
      squares.push(<Square color={this.props.color} key={i} />);
    }
    console.log(this.props.color)
    return squares;
  }

  render() {


    return (
      <div id="squaresContainer" className="container">
        {this.createSquares()}
      </div>
    );
  }
};

export default SquaresContainer;

Это квадратный компонент:

import React from 'react';

import './Square.css';

const Square = (props) => {

  return (
    <div className='square square__elem' style={{backgroundColor: props.color}}></div>
  );
};

export default Square;

Это распечатка с происходящего: enter image description here

1 Ответ

0 голосов
/ 07 декабря 2018
You are creating 6 squares with the same color:

createSquares = () => {
    let squares = [];
    for (let i = 0; i < this.state.squares; i++) {
        squares.push(<Square color={this.props.color} key={i} />);
    }
    console.log(this.props.color)
    return squares;
  }


Where color passed by props through here:

<SquaresContainer color={this.generateRandomColor()} />
...