2016-08-10 20 views
0

I持ってthis SO answerから取らso calledcurried formatで、次の矢印の機能、:カレー機能

私はES6構文で記述されたリアクト部品、でそれを使用する必要が
const getIntervals = n=> availability=> {} 

the implementationのためにES7プロパティ初期化子を処理できません。リアクトのクラスコンテキストで

「通常」の機能は、このシンプルなスタイルがあります。

myFunction() {} 

をしかし、私はこのスタイルにgetIntervals機能を変換するのでしょうか?

+0

にES7は、プロパティ初期化子を持たないシンプルなので、私は脚注として、このままにしておきます。あなたは[この提案](https://jeffmo.github.io/es-class-public-fields/)について話していますか? –

答えて

3

普通の方法としてgetIntervalsを定義し、それはあなたのカリー化関数を返します:私の仕事は別の質問で参照見え

class Example extends Component { 
    getIntervals(n) { 
     return (availability) => { 

     } 
    } 
    render() {...} 
} 
1

クール。私はそれがあなたのために働いてうれしいです。

@RobMは(いつも)良い答えをあなたに提供しましたが、別の選択肢があります。


まず、カルト形式で機能を保持する必要はありません。これはユーザ定義のプロシージャなので、タプルを取るほうが良い場合には、そうすることができます!それを&hellipと同じくらい簡単に変換できます。 †あなたは

// curried form 
getIntervals (30) (availability) 

// changes to 
getIntervals(30, availability) 

それを呼び出すとき

// curried form 
const getIntervals = n=> availability=> { ... } 

// uncurried form 
const getIntervals = (n,availability)=> { ... } 

は、それから私は、一般的にカリー化形式で関数を定義しますが、それは決してあなたが従わなければならない要件です。洗練されていない形式では、Reactコンポーネントに…というように直接定義することができます。

class Example extends Component 
    getIntervals (n,availability) { 
    // ... 
    } 
} 

それともgetIntervalsは、一般的な、純粋な関数であるため、コンポーネント内のすべてのコードを埋め込むする理由はありません。

// curried 
const getIntervals = n=> availability=> { ... } 

// or choose uncurried 
const getIntervals = (n,availability)=> { ... } 

// call it from withint the class 
class Example extends Component 
    getIntervals (availability) { 
    return getIntervals (this.props.intervalLength, availability) 
    } 
} 

また、ラッパー機能をまったく持たないこともあります。戻り値は、イベントハンドラやいくつかの状態の突然変異のように、他の方法で使用される可能性が高い …

const getIntervals = (n,availability) => { ... } 

class Example extends Component { 
    // constructor ... 
    onclick (event) { 
    let intervals = getIntervals(this.props.intervalLength, this.state.availability) 
    // do something with intervals 
    console.log(intervals) 
    } 
    render() { 
    return <button onClick={e=> onclick(e)}>show intervals</button> 
    }  
} 

今すぐgetIntervalsは、このファイルをすべて残すことができます。あなたはutils.jsにドロップし、それが

import {getIntervals} from './utils' 

class Example extends Component { 
    onclick (event) { 
    let intervals = getIntervals(this.props.intervalLength, this.state.availability) 
    // ... 
    } 
    // ... 
} 

私は例としてthis.props.intervalLengththis.state.availabilityを使用するインポートできます。私は実際には、これらの2つの値がどのようにコンポーネントに関連付けられているかはわかりません。私が去ることまであなたに^ _^uncurried手順にカレーから


†変換は、一般的に簡単ですが、あなたはカリー化手順は、再帰的な1 —ある場合に注意する必要があり、その場合、あなたの」 dは再帰呼び出しを更新する必要もあります。

私はgetIntervalsを書き、変換は、この特定のシナリオ

+0

私の世界を啓発してくれてありがとう、あなたの教えのおかげですばらしい日でした。 –

+0

お手伝いします^ _ ^ – naomik