@Naislymon

Как передать функцию, чтобы заработал онклик в react?

Есть два компонента, один App, где я рендерю фигуры с помощью второго. Есть 3 фигуры, и нужно при нажатии на любую фигуру, выводить ее выше в отдельный див, нажал на фигуру - она вывелась и так бесконечно. Что дописать в Figure, чтобы он начал работать верно?

export default class Figure extends React.Component {
  render(props) {
    return <div onClick={this.props.change} className={this.props.type} />
  }
}

class App extends React.Component {
  constructor(props) {
    super(props);
      this.state = {
      figure: [],
      index: 0,
    }
    this.change = this.change.bind(this);
  };

  change(type){
    const figures = this.state.figure
    figures.push(type)

    this.setState({figure: figures})
  };

  render() {
    return (
      <div className="app">
        <div>{this.state.figure}</div>
        <div className="fig-container">{this.state.figure.map((figureType, i) => <Figure type={figureType} key={i}/> )}</div>
        <div className="figures">
          <Figure type="circle"/>
          <Figure type="square"/>
          <Figure type="triangle"/>
        </div>
      </div>
    )
  }
}
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
const Figure = ({ type, ...props }) => <div className={type} {...props}></div>;

class App extends React.Component {
  state = {
    types: [ 'circle', 'square', 'triangle' ],
    figures: [],
  }

  add(type) {
    this.setState(({ figures }) => ({
      figures: [ ...figures, type ],
    }));
  }

  render() {
    const { types, figures } = this.state;

    return (
      <div>
        <div>
          {types.map(n => <Figure type={n} onClick={() => this.add(n)} />)}
        </div>
        <div>
          {figures.map(n => <Figure type={n} />)}
        </div>
      </div>
    );
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 мар. 2024, в 11:54
3000 руб./за проект
19 мар. 2024, в 11:52
3000 руб./за проект
19 мар. 2024, в 11:49
10000 руб./за проект