Передача props, как параметра в функцию в React

481
03 декабря 2017, 14:41

Есть компонент, в который входят 2 других компонента: кнопки и блок, кнопок несколько, и при нажатии на кнопку, блок должен принимать ее цвет. Не могу понять, как в функцию, которая меняет цвет блока, передать нужный цвет кнопки.

class App extends React.Component {
  constructor(props) {
  super(props)
    this.state = {
      color: 'green'
    };
   this.handleSetColor = this.handleSetColor.bind(this);
  }
  //как сюда передать props из кнопки?
  handleSetColor() {
    this.setState({
      color: color
    })
  }
  render() {
   return(
     <div>
       <Button color={'green'} onClick = {this.handleSetColor}/>
       <Button color={'red'} onClick = {this.handleSetColor}/>
       <Button color={'yellow'} onClick = {this.handleSetColor}/>
       <Button color={'blue'} onClick = {this.handleSetColor}/>
      <ColorContainer color={this.state.color}/>
    </div>
   ) 
  }
}
class Button extends React.Component {
  constructor(props){
    super(props)
  }
  render() {
   return(
     <button onClick={this.props.onClick} 
             style={{backgroundColor: this.props.color}}
       {this.props.color}
     </button>
  ) 
  }
}
class ColorContainer extends React.Component {
  constructor(props){
    super(props)
  }
  render() {
    return(
      <div className={'color-cont'} style={{backgroundColor: this.props.color}}>Color container</div>
    ) 
  }
}

ReactDOM.render(
  <App/>,
  document.getElementById('root')
);
Answer 1

Оберните хендлер в функцию и передайте в нее цвет, в качестве аргумента. Так же укажите параметр цвета в хендлер.

...
handleSetColor(color) {
    this.setState({color: color})
}
...
const Button = props => {
    const {color, onClick} = props;
    return(
        <button onClick={() => onClick(color)} 
                style={{backgroundColor: color}}>
            {color}
        </button>
    )
}
READ ALSO
Angular 4 на работает router после отправки запроса

Angular 4 на работает router после отправки запроса

Пытаюсь обойти это баг уже более суток без снаПосле того как я отправляю внешний запрос то важная onInit перестает вызываться у компонентов...

312
Как сделать, чтобы скрипт выполнялся при определнных разрешениях экрана?

Как сделать, чтобы скрипт выполнялся при определнных разрешениях экрана?

Добрый день мне необходимо чтобы этот скрипт выполнялся при заходе с мобильного

434
mousemove действие

mousemove действие

Хочу сделать скрипт, чтобы сдвинув мышь на определенное количество пикселей вниз выполнялся внутренний скрипт

188
Жесты на веб сайте

Жесты на веб сайте

Кто-нибудь сталкивался или знает что-нибудь на тему жестов на веб сайте с тачпада или мобильных устройств? Возможно ли вообще реализовать...

178