У меня есть его код, в котором я пытаюсь передать переменную в handleclick fcn и установить состояние этой переменной:
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
name: 'Initial State'
};
this.handleClick = this.handleClick.bind(this);
}
handleClick(temp) {
this.setState({
name:temp
});
}
render() {
return (
<div>
<button onClick = {this.handleClick('name')}>Click Me</button>
<h1>{this.state.name}</h1>
</div>
);
}
};
Это не работает, может кто-нибудь объяснить, как передать переменную и установить ей состояние, если это возможно?





Записывая this.handleClick('name'), вы вызываете функцию handleClick непосредственно при рендеринге. Вы хотите передать функцию опоре onClick, которая будет вызываться при щелчке мышью.
Пример
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
name: "Initial State"
};
this.handleClick = this.handleClick.bind(this);
}
handleClick(temp) {
this.setState({
name: temp
});
}
render() {
return (
<div>
<button onClick = {() => this.handleClick("name")}>Click Me</button>
<h1>{this.state.name}</h1>
</div>
);
}
}
ReactDOM.render(<MyComponent />, document.getElementById("root"));<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id = "root"></div>Это приведет к созданию стрелки на каждом рендере, что нежелательно, если этого можно избежать.
Итак, какое решение было бы лучше?
@ Jrobm2k9 Не беспокойся об этом. Если ваш вариант использования абсолютно требует его преждевременной оптимизации, вы можете использовать атрибут данных.
Отлично, спасибо! Я попытался отметить это как ответ, но мне нужно подождать 10 минут