2017-08-14 14 views
0

以下のスクリーンショットをご覧ください。テキスト入力フィールドが空であることがわかりますが、そのvalue属性は "b"に設定されています。value属性が設定されていると、テキスト入力はどのように空になりますか?

enter image description here

あなたはvalueが、ここで「」に設定されていることを、inputの下で、[プロパティ]タブにも気付くでしょう。彼らはなぜ異なっているのですか?これは何を意味するのでしょうか?

これは、入力がReactによってレンダリングされたという事実に関連していますか?

それが助け場合は、ここでは、この要素(編集済み)の責任JSXです:

return (
    <td 
    key={field._id} 
    className={`oldField ${colPos}`} 
    > 
    <input 
     type="text" 
     defaultValue={value} 
     onChange={this.changeOldField(record, field)} 
    /> 
    </td> 
) 
+0

first-colは正常に動作し、Reachによってレンダリングされませんか? – Mindless

+0

私はあなたの質問を理解するか分からない。それがあなたが意味するものなら、すべてがReactでレンダリングされます。 'first-col'、' last-col'、 'oldField'の場合は、私のjsxの'​​'タグの' className'属性を使って追加しました。 – Shawn

+0

私は「Properties」タブの「input」の下に「defaultValue」が「b」に設定されていることに気付きました。 'value'自体はそれだけではありません。しかし、最後のReactレンダリング以来、私はフィールドの値を変更しませんでした。 – Shawn

答えて

1

あなたが状態から何かに基づいてはdefaultValueを変更しているようです。 defaultValue propは一度だけ設定し、後で変更しないようにしてください。それ以上の変更はReactによって無視されるためです。状態に基づいて値を変更したい場合は、通常の値のpropを使用する必要があります。それ以外の場合は、事前定義された値をユーザーに表示し、同時に変更が加えられたときに入力を制御する場合は、コード内でonChangeとコンポーネントのコードを自動的に変更するロジックを使用できます値を設定するか、またはプレースホルダーの小道具に配置します。これにより、必要なものを与えることができます。

+0

'defaultValue'の代わりに' value'を使うと、ユーザはフィールドを変更することができません。 'placeholder' propはユーザーがプレースホルダーの値に追加できないのであまり良くありません。 「onChangeとコンポーネント内のコードを自動的に変更したいコードの両方を処理するコードで、ロジックを使用する」とは、どういう意味なのか分かりません。私は入力上に 'onChange'リスナーを持っていて、状態が変わったときに' defaultValue'を使って「自動的に値を変更する」ことに頼っていました。 – Shawn

+0

btw 'onChange'ハンドラは状態を変更しません。 – Shawn

+0

私は 'td'の' key 'に変更を強制して解決しましたが、Reactは 'defaultValue' propを無視していません。 btwこのReactの動作をバグと見なすべきではありませんか? – Shawn

関連する問題