私はES6で、私は手動で各コンテキストをバインドしなければならないことを理解し方法。
ええ、それは完全に真実ではありません。 ES6では、ES5の場合よりも多くのことを表現することができます。
あなたのコードをES6に書き込んだとしても、あなたが持っているコードをES5から直接翻訳するというわけではありません。現在のバージョンのReactの新機能やES6に固有の機能を使用して、それを行うための慣用的な方法があります。
import {Component} from 'react'
class Foo extends Component {
// this class doesn't even need constructor
createButton(text) {
// don't write
// return <button onclick={this.handleClick.bind(this)}>{text}</button>
// instead write
return <button onclick={e=> this.handleClick(e)}>{text}</button>
}
handleClick(event) {
console.log(event, 'button was clicked')
}
render() {
var {buttons} = this.props;
// don't write
// return <div>{buttons.map(this.createButton.bind(this)}</div>
// instead write
return <div>{buttons.map(this.createButton, this)}</div>
}
}
export default Foo;
// <Foo buttons={["one", "two", "three"]} />
お知らせ私は結合がほとんどのシナリオで必要とされていないため、字句this
を持ってFunction.prototype.bind
- アロー機能を必要としない2つの異なる方法でコンテキストを使用しました。矢印機能はES6の新機能です。
Array.prototype
機能forEach
、reduce
、map
のようなあなたは、コールバックのコンテキストを変更することができますthisArgument
を受け入れます。これはES6には新しくないので、今日あなたのES5コードでこれを使用するのを止めるものは何もありません。
しかし、あなたはまた、これはstateless functional componentあると思いますか?ステートレス機能部品は、のように利用できる慣用的には0.14
がコードに反応反応して、あなたが書いたコンポーネントのほとんどは、単に他のコンポーネントを構成する、ステートレスになります。私たちは、あなたがレンダリングしたい要素を引数として小道具を取り、返すことができ、これらのコンポーネントのための新しい、簡単な構文を導入している
ソース:React Blog v0.14
このコードは機能的に同一でありますしかし、上記の構成要素には、このアプローチは、コンポーネントのために働くことはできませんもちろん何のclass
またはコンテキスト式典
const createButton = (text) => {
return <button onClick={handleClick}>{text}</button>
}
const handleClick = (event) => {
console.log(event, 'button was clicked')
}
// stateless functional component
const Foo = ({buttons}) => {
return <div>{buttons.map(createButton)}</div>
}
export default Foo;
を必要としない点I state
(またはライフサイクルメソッド)ですが、これはほとんどのコンポーネントであるprops
を使用するコンポーネントすべてに適用されます。
これは、Function.prototype.bind
を含まない慣用的な方法でリアクションアプリを書かなければならないもう1つの手法です。
何の価値があるのか、私はFunction.prototype.bind
(私が書いたコードで)年に依存していません。
@naomikがダウンして削除のフラグが立っていても、私の答えを見ることをお勧めします。それはFacebookからの直接的な解決策であり、その理由を説明しています。 – mtaube