2017-03-20 14 views
0

私は以下のコードを持っていますが、もっと乾燥させる方法があります。しかし、私はどのように見つけることができない?国家を変えることはできません。ありがとう!DRY反応複数の類似の機能をコード

handleChangeN(event){ 
 
    let numb = event.target.value; 
 
    this.setState({N: numb}); 
 
} 
 
handleChangeI(event){ 
 
    let numb = event.target.value; 
 
    this.setState({I: numb}); 
 
} 
 
handleChangePV(event){ 
 
    let numb = event.target.value; 
 
    this.setState({PV: numb}); 
 
} 
 
handleChangePMT(event){ 
 
    let numb = event.target.value; 
 
    this.setState({PMT: numb}); 
 
} 
 
handleChangeFV(event){ 
 
    let numb = event.target.value; 
 
    this.setState({FV: numb}); 
 
} 
 
handleChangePY(event){ 
 
    let numb = event.target.value; 
 
    this.setState({PY: numb}); 
 
} 
 
handleChangeCY(event){ 
 
    let numb = event.target.value; 
 
    this.setState({CY: numb}); 
 
}

答えて

1

このような何かがうまくいくかもしれない:

handleChange = (event, prop) => this.setState({ [prop]: event.target.value }); 

あなたは、このようなあなたの機能をバインドすることができます。

<Component onChange={event => this.handleChange(event, "N")} /> 
+0

ああありがとう、これは私がやったことです、ちょうどなぜ小道具が最初の議論にならなければならないのだろうか?私はそれを(イベント、小道具)のままにしておきます。コンポーネントはどのように見えますか? this.handleChange( "N"、event)} /> – eti

+0

最初の引数としてpropを保持する必要はありません。コンポーネントは次のようになります。 this.handleChange(event、 "N")} />あなたの関数は、最初にイベントを受け取りますhandleChange =(event、prop)=> ...あなたは、より良い名前のためにpropの名前を変更することもできます。あなたの必要に応じて私の例を更新しました。 –

1
handleChange(event, code){ 
    const numb = event.target.value; 
    const toChange = {[code]: numb}; 
    this.setState(toChange); 
} 
1

それはABですあなたはこれらのそれぞれに別々の機能を持っている必要がありますか?関数が(.bind()メソッドを使って)呼び出されたときに、型(CY対PY対FV ...)を渡すことは可能でしょうか?

これは私にたくさんのクリーナーようだ:

handleChange (type, event) { 
    this.setState({[type]: event.target.value}); 
} 


// Somewhere later on .... 


something.onClick(handleChange.bind(this, "FV")); 

編集:コード重複

+0

私はバインドを使っていたので、この解決策になってしまいました。あなたのハンドルが変更された場合、コンポーネントの外観はどのようになりますか?handleChange(event、type) – eti

+0

これは不可能です。型パラメータを 'bind'で強制することで、常に最初の引数になります。 EDIT:さて、このモンスターが存在する.... \t something.onClick(関数(イベント){ \t \t handleChange(イベント、 "FV") \t})。 –

+0

ああ、ありがとう。反応に複数の引数をバインドすることは可能ですか?本当にありがとう! – eti

1

これも選択肢です。

handleChanges(event) { 
    const target = event.target; 

    this.setState(
    { 
     [target.name]: target.value 
    } 
); 
} 

次に、このようなハンドラを登録できます。

return <input type='text' name='N' onChange={ this.handleChanges } /> 

状態の入力値を変更するたびに、Nは入力と同じになります。

関連する問題