2017-11-06 35 views
0

私は反応ネイティブprojetcで作業していますが、私はReduxをよく理解していません。各行は、カード情報である特定の配列項目内の入力値をreduxで更新できません

lines[ 
    {"cant":2, "ref":"bar"}, {"cant":5, "ref":"foo"} 
] 

:私は、我々は次のようにそれをオブジェクトの配列を得たhelp.:D 必要です。これらのカードには、値を変更するための入力(カント、リファレンス)があります。 全体の目的である:

obj:{ 
    "a": '', 
    "b": '', 
    "lines": [ 
    {"cant":2, "ref":"bar}", 
    {"cant":5, "ref":"foo"} 
    ] 
} 

ユーザが何らかの入力にいくつかの値を挿入するとき、それは(onChangeTextと呼ばれます)。一方、減速中

<Input 
     placeholder="Cant" 
     value={this.props.newOrder.lines[index].cant} 
     onChangeText={(text)=> { 
      this.props.onChangeCant({"cant":text,"index":index}); 
     }} 
    /> 

(我々が使用反応-アドオン更新を):

case ON_CHANGE_CANT: 
     return update(state, { 
      lineas: { 
      [action.payload.index]: { 
       cant: {$set: action.payload.cant} 
      } 
      } 
     }); 

すべてはそれだけで一つの文字を更新のみを除いてOKです。例:Cant:1.入力フォーカスがありません。入力した場合:Cant:。 のみ更新します。より速く入力するかどうかは関係ありません。入力した最初の文字のみを更新します。 Reduxの動作が問題だと思われますが、その理由はわかりません。

私たちは、デバウンス(lodash)を使用しようとしたが、我々はすべてのアイデアは

をしてください成功していませんか?

ありがとうございました!私はそれが私の説明を理解することを願っています。

+3

'lines'は配列ですが、あなたのレデューサーでは、それがオブジェクトであるかのように扱っています。 –

+0

あなたは '_.debounce'を使ってどのように試してみましたか – Aaqib

+0

入力を地図で作成していますか?問題は、コンポーネントの再レンダリングが原因である可能性があります。小道具が変更されているので、それは再レンダリングをトリガーし、 'key'小道具を使用していない場合、入力の焦点を失うことにつながります。 – bennygenel

答えて

0

Rockandbitちょうどreact-addons-updateドキュメントをお読みください。

return update(state, { 
    lines: {$splice: [[action.payload.index, 1, action.payload.cant]]} 
}); 

しかしaction.payload.cantはあなたが交換したいオブジェクト全体でなければならないことに注意してください:あなたはこのような何かを見て、あなたの減速機ケースをしたいと思います。だからそれを渡すか、あらかじめ州から取得する。

+0

私はあなたのソリューションを試して、それが正しく更新されますが、私はまだフォーカスを失っています。私は1文字を入力し、コンポーネントをレンダリングします.Thanx – rockandbit

関連する問題