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')
);