2017-03-29 19 views
0

こんにちは私はReact/Reduxをmayアプリに使用しています。私は複数の入力フィールドを動的にレンダリングする必要があります。私が今直面している問題は...React/Reduxコンポーネントの再レンダリング

フォームにすでに2つの入力フィールドがあり、合計5つの入力フィールドが必要な場合は、単純に5回繰り返すループの助けを借りてこれらをレンダリングします。問題は、3つの新しいフィールドをレンダリングし、2つの古いフィールドを一番上に維持することです。しかし、新鮮な5つのフィールドが必要です。最初に古いフィールドを削除して5つの新しいフィールドを表示するように強制する方法はありますか?

+1

コードを使用するには?あなたの入力を独自のコンポーネントにリファクタリングして、それをループでレンダリングしますか? – aeid

+0

Reactは、あなたが求めているものを達成するために最小限のDOM変更を行います。これはあなたのコードを見ることなく、これが最善の方法だとは言い難いですが、すべてのフィールドを落として(0まで)、それらをバックアップすると、5つの新しいフィールドで終わるはずです。 – user2027202827

+0

あなたのコードの例を表示できますか? – Gayane

答えて

1

問題はキー属性にあります。コンポーネントに新しいキーを1つずつレンダリングすると、フィールドが再作成されます。

小さな例は以下のとおりです。私は一意のキーを生成するためにMath.and()を使いました。もちろん、より良いshortidまたは類似

https://www.npmjs.com/browse/keyword/shortid

class InputRenderer extends Component { 

    constructor() { 
    super() 
    this.state = { 
     inputsCount: 3 
    } 
    } 

    handleInputsCountChange = (newCount) => { 
    this.setState({ 
     inputsCount: newCount 
    }) 
    } 

    renderInputs =() => { 
    const inputs = [] 
    for (let i = 0; i < this.state.inputsCount; i++) { 
     inputs.push(<input key={i + Math.random()} />) 
    } 
    return inputs 
    } 

    render =() => 
    <div> 
     <button onClick={() => this.handleInputsCountChange(3)}>3</button> 
     <button onClick={() => this.handleInputsCountChange(5)}>5</button> 
     {this.renderInputs()} 
    </div> 
} 
関連する問題