2016-12-08 10 views
0

OSを保持されていません前の選択されたオプション状態を表示する(戻る)。選択状態は、新たな選択オプションに

ので

、次のコードを使用して:オプション「二」を選択しようとする

cont options = [ 
    { value: 'one', label: 'One' }, 
    { value: 'two', label: 'Two' } 
]; 

class funcName extends React.Component { 

render() { 

return (

logChange = (val) => { 
    console.log("Selected: " + val); 
} 

<Select 
    name="form-field-name" 
    value="one" 
    options={options} 
    onChange={logChange} 
/> 
); 
} 
} 

は保持されることはありません。直ちに選択が行われ、オプション「1」を選択すると表示され、(val)の表示値は常に「1」になります。 onChange行をコメントアウトすると、選択ボックスは期待どおりに機能します。

ここで問題は何ですか?

+0

あなたのオプションの宣言にタイプミスがあります。また、小道具としてオプションを渡すべきではありませんか?これは完全なプログラムですか? –

+0

私はここで推測していますが、 "Select"という名前のカスタムコンポーネントを使用しているようです。私はそのドキュメントをチェックしたいと思います。それがReactのほとんどのもののように機能する場合は、コンポーネントに送信する値propを更新して視覚的に変更する必要があります。コールバックを介してユーザーが選択した値を送信しますが、その値を保存してコンポーネントの小道具を更新することができます。さらに、onChangeを削除すると、このコンポーネントが制御されていないモードに戻ってしまいます。多分組み込みの「選択」を使い、その目的のためのアレックスの答えをチェックすることから始めましょう。 –

+0

@RobLynch上記の問題を次のように表示します:https://plnkr.co/edit/HTmtER9AMNcPoWhXV707?p=preview – TheoG

答えて

1

あなたの根本的な問題は、あなたが実際にあなたのコード内で何もしてコンポーネントを持っていないということですので、選択は、単に静的にレンダリングあなたが最初に設定した小道具。

アレックスによれば、選択コンポーネントに送信するvalue小道具を視覚的に更新するために更新する必要があります。非常に基本的なレベルでは、あなたの例では作成していない親コンポーネントでsetStateを呼び出し、その値を子Selectコンポーネントに渡します。私は完全な作業サンプルはこちらにコードを更新した

<Select 
    name="form-field-name" 
    value={this.state.selection.value} 
    options={options} 
    onChange={this.changeSelection} 
/> 

は:https://plnkr.co/edit/TlUe2eJd3OSxGkdHIKJP?p=preview

1

valueフィールドを指定すると、レンダリング関数が呼び出されるたびに値が再割り当てされます。代わりにdefaultValueを使用してください。

LE:制御されていないコンポーネント対制御について少し読んで価値があるかもしれません:https://facebook.github.io/react/docs/forms.html

関連する問題