React Base Fiddle (JSX)
Starting point for creating JSFiddles with React.
by Andrew Dunai
HTML
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>
Babel + JSX
// 0. Цей код вже працюватиме!
class App extends React.Component {
constructor() {
super();
this.state = {counter: 0};
}
increase() {
// 2. Тут this буде в порядку!
this.setState({counter: this.state.counter + 1});
}
render() {
return <div>
Counter equals to {this.state.counter}
<input type="button" onClick={() => this.increase()} value="Click me!" />
</div>;
// 1. А тут ми замінили
// onClick={this.increase}
// на
// onClick={() => this.increase()}
// і все запрацювало! Бо стрілочна функція успадкувала нормальний, непохерений this від предка.
// Крім того, ще поширений такий варіант:
// onClick={this.increase.bind(this)}
// ...що означає: "Прив'яжи НОРМАЛЬНИЙ this до функції increase!!!
// PRO TIP: Я рекомендую тобі на початках ЗАВЖДИ давати в onClick, onChahge і т.п. стрілочну функцію. Так - значно простіше.
// Тобто:
// onClick={() => this.increase()}
// або (без використання проміжної функції increase):
// onClick={() => this.setState({counter: this.state.counter + 1})}
// ...але в обох варіантах слід це загортати в стрілочну функцію. Так буде менше проблем. Забудь за bind, просто завжди давай реакту стрілочні функції.
}
}
ReactDOM.render(
<App />,
document.getElementById('container')
);