私のコンポーネントには次のコードがあります。特定のものを更新するときに呼び出され、UIの中のものを置き換えます。ユーザーが見た入力値を除いてすべてが更新されています。入力値がReactで更新されないのはなぜですか?
let input = {
id: 'discount-' + geo + '-' + segment,
value: percentage,
disabled: applyToAll,
placeholder: '0.00'
};
cells.push(
<td key={'cell-' + geo + '-' + segment} className="discount-segment cfix">
<Text {...input} />
</td>
);
これは、物事を持つ<Text>
戻ると、
return (
<div className={containerClasses.join(' ')} id={'field-container-' + id}>
{label}
<input
autoComplete="off"
type="text"
id={id}
ref="input"
{...extraProps}
name={id}
className={classes.join(' ')}
defaultValue={this.props.value}
onChange={this.props.onChange}
/>
</div>
);
すべてが細かいレンダリング明確にするため取り除かものです。たとえば、percentage
の値が5
の場合は、フィールドに5
と表示されます。私はpercentage
を50に更新する何か他のことをします。(コンソールログは、再レンダリング時に正しい番号を表示します)。ただし、値は5
しかUIに表示されません。私は入力フィールドにdefaultValue
を使用していますが、親から再レンダリングされたものすべてが変更されるはずです。
編集 はvalue
代わりのdefaultValue
を設定する<Text>
を更新しました。しかし、私はstate
を使用して、ユーザータイプの値を更新する必要があります。それから私が再レンダリングするとき、私は適切な価値を持って新しい小道具を送りますが、もちろん小道具は更新されません。私のためにキャッチ22。
全体が再レンダリングされていますか? defaultValueの代わりにvalueを使用しようとするとどうなりますか? (プラス、これは何ですか?変更は何ですか?) – TAGraves
@TAGraves今は変更しません。変更はありません。上の行は、 ''を使って私がコンポーネントの 'render'の中にいることを示しています。レンダリングメソッドには '{cells}'があり、それが期待されるたびに呼び出されています。 –
これはあなたの入力がアンマウントされているのではなく、新しい入力がレンダリングされていることを意味します。 'defaultValue'は初期レンダリングの後では更新できません。 – TAGraves