2017-02-04 9 views
0

defaultValueは、ページが初めて読み込まれるときにのみ機能します。同じページを再度ロードするが、異なるpropsがある場合、制御されていない入力フィールドには、新しいpropsの新しい値が入力されません。反応していない入力フィールドの値を設定する方法はないようですね。制御されていない反応入力フィールドに入力する正しい方法は何ですか?

私は材質-UI、私の制御不能な入力フィールドを使用していますが、このようなものになります。

<TextField 
    ref={input => this.dataNode.Name = input} 
    defaultValue={this.props.dataNode.Name} 
    floatingLabelText="Name" 
/> 

をそれはトリックは、しかし、私は本当に導入する必要がないん入力にランダムkeyを追加するようです無制御入力ごとにランダムなキー?

<TextField 
    key={some_random_thing} 
    ref={input => this.dataNode.Name = input} 
    defaultValue={this.props.dataNode.Name} 
    floatingLabelText="Name" 
/> 
+0

あなたのコードのいくつかは役に立つかもしれません:) – CharlieBrown

+0

あなたはこれを説明できますか? '同じページをもう一度読み込むとき'どうやってこれをやっている?親コンポーネントの値を更新すると、子が確実に更新されるためです。 –

+0

ナビゲーションメニューについて考えてみましょう。すべてのメニュー項目は同じページにリンクされていますが、別の 'props'が渡されます。私の場合、別のページへの別のリンクをクリックしてフォームに戻ると、値が正しく入力されます。同じページです。たとえ新しい 'props'であっても、フォームはまだ古い値を持っています。 –

答えて

0

問題は解決key={Math.random()}を追加することによって、(回避):

<TextField 
    key={Math.random()} 
    ref={input => this.dataNode.Name = input} 
    defaultValue={this.props.dataNode.Name} 
    floatingLabelText="Name" 
/> 

醜いです!

0

「入力を設定している」という事実によって、入力フィールドを「制御」しようとしています。私は先に進んで、これを制御された入力にするために余分な数行のコードを実行します。そこに害はありません、そして、実際に私はあなたが "反応する"方法でやろうとしていると思います。

+1

いいえ、私たちは制御できない入力について話しています。私は制御された入力の仕組みを理解していますしかし、私の質問は、制御されていない入力に関するものです。 –

+0

私が言っていることは、値を全く設定することによって、入力の何らかのレベルの制御を適用していることです。 –

+0

'defaultValue'の代わりに' value'を使うことを意味しましたか?この場合、入力は読み取り専用になります。 –

関連する問題