前のコードをES2015の構文に翻訳したとき、一部の関数が別の構文に変換されました。それらのうちのいくつかはfuncName()
であり、そのうちのいくつかはfuncName =() =>
です。違いは何ですか?なぜそれらのいくつかは "funcName()"であり、いくつかは "funcName =()=>"ですか?
import React, { Component, PropTypes } from 'react';
export default class Stopwatch extends Component {
state = {
running: false,
previouseTime: 0,
elapsedTime: 0,
}
componentDidMount() {
this.interval = setInterval(this.onTick);
}
componentWillUnmount() {
clearInterval(this.interval);
}
onStart =() => {
this.setState({
running: true,
previousTime: Date.now(),
});
}
onStop =() => {
this.setState({
running: false,
});
}
onReset =() => {
this.setState({
elapsedTime: 0,
previousTime: Date.now(),
});
}
onTick =() => {
if (this.state.running) {
var now = Date.now();
this.setState({
elapsedTime: this.state.elapsedTime + (now - this.state.previousTime),
previousTime: Date.now(),
});
}
}
render() {
var seconds = Math.floor(this.state.elapsedTime/1000);
return (
<div className="stopwatch" >
<h2>Stopwatch</h2>
<div className="stopwatch-time"> {seconds} </div>
{ this.state.running ?
<button onClick={this.onStop}>Stop</button>
:
<button onClick={this.onStart}>Start</button>
}
<button onClick={this.onReset}>Reset</button>
</div>
)
}
}
違いは、それらのうちの1つが有効なES2105( 'class'構文)であり、もう1つが有効でないことです。 – Bergi
@NickParsons質問のうちのいくつかは矢印関数であるのに対し、その他は通常の関数プロパティです。 'funcName =()=> {}'は[ESnextのクラスフィールド](https://github.com/tc39/proposal-class-fields)です。 – Xufox