2017-09-11 10 views
0

React with Redux.Thingsで作業しているときに、問題が1つ発生するまで非常に自由に流れました。しかし、私はあなたの助けが必要です。複数の入力フィールドがループによってペイントされていて、反応と還元の挿入時に新しい値が更新されない

だから私は(コンポーネントが反応しcomponentWillMountに持っている)私はそれがgetSupplierアクションをディスパッチするような場所で自分の行動と行動のクリエイターを持っているAPI呼び出し

からデータを取得し、私はReduxの状態に保存などサプライヤリストは、 [{name: 'Bob'、score:10、id:1}、{name: 'John'、score:10、id:2}]のようなオブジェクトの配列です。

今、私のUIは、テーブルdata.Scoreとして名前とスコアを持つテーブルで構成され、最初はgetSupplierサービスからのスコア値を持つ入力フィールドになります。

私はループとフォロー

render(){ 
     var data = this.props.supplierList; 
     if(data.length){ 
      return (
       <div className='fx-container'> 
        { 
        data.map((v,i)=>{ 
         (<div class='fx-table-row' key={v.id}> 
          <div class='fx-supp-name'>{v.name}</div> 
          <input 
          type='text' 
          className='fx-input' 
          value={v.score} 
onChange={(e)=>{this.handleInputChange(e.target.value)}} 
          onBlur={(e)=> {this.props.actions.updateScore(v.id,e.target.value)}} 
          </div>); 
         }); 
        } 
       <div> 
      ); 
     } 
     else{ 
     return null; 
     } 

    } 

だから私は私のintial値をペイントしていますし、新しい値の挿入にぼかしに私が行動を派遣して、新しい値を更新する必要があるとして、私のコンポーネント内JSXを返しましたaction.jsファイルに書かれています 私が直面している問題は、入力に値を挿入できないことです。私はバックスペースを押して新しい値を挿入できません。

私は反応して還元するのが好きなので、助けてください。 PS:上のコードは私の問題を説明するためのダミーコードです。

+0

を使用する必要がありますあなたはupdateScore()関数のコードを表示することができます

を変更しない限り、入力フィールドの値が変更されることはありません。 – superdev

+1

こんにちはVladimir.Updatescore関数のコードが正常に動作していますが、入力をぼかすとトリガーされますが、私の関心事は入力内に新しい入力値を挿入できないことです。入力は単に値の属性を更新しません –

+0

私は、props.supplierListが – superdev

答えて

2

まず、componentWillMountでAPIを呼びたくない場合があります。この投稿を参照してください:https://daveceddia.com/where-fetch-data-componentwillmount-vs-componentdidmount/

入力を変更できない理由は、これが制御されたフィールドであり、onChangeイベントを呼び出さないということです。参照してくださいvalue={v.score}

の入力フィールドの値がv.scoreによって制御され、それはそうthis.props.actions.updateScore()機能であなたがそうprops変更することをscoreを変更する必要がありprops

からですのでhttps://facebook.github.io/react/docs/forms.html

+1

に変更されるように、onChange()イベントでthis.props.actions.updateScore()関数を呼び出す必要があります。また、マップされたアイテムにキーを提供する必要があります。 https://facebook.github.io/react/docs/lists-and-keys.html – ovation22

+0

元のコードにキーとonChangeメソッドを入れました。ここを入力している間にちょうど逃しました。ちょうど更新されました。私の次の質問onChangeの中で何をしなければならないのですか?私はredux状態を変更し、入力値の変更に新しい値を保持し、すべてを再度レンダリングするアクションをディスパッチする必要がありますか?私はそれを行うことでそれを作ったが、正しいアプローチに従っているかどうかわからない。 –

+1

はい。スコアを更新するアクションをディスパッチします。代わりに、https://redux-form.com/のようなものを調べることができます。 – ovation22

1

それはです。

propsはまた、あなたがonChange()代わりのonBlur()

+0

返信ありがとうウラジミール。ですから、基本的には、私のonChangeがアクションをディパッチし、それが新しい値でトリガーを再描画するので、入力内の各文字のタイプをすべて再描画します。これはパフォーマンスを阻害しますか?他の方法はありますか? –

+0

React.jsがそのように開発されたため、正直なところ代替手段はありません。 – superdev

+0

そうですか.Okay.Anywaysあなたの入力のために多くのおかげで:) –

関連する問題