私のレデックスアプリケーションにはいくつかのフォームがあります。私はredux-form-material-ui
も使用します。 SelectFieldsには、そのオプションにデフォルトで設定されるオプションが1つだけあります。フォームコンポーネントを構築中にinitialValues
を設定してこれを行う唯一の方法はありますか?SelectFieldの単一オプションを選択してください。redux-form-material-ui
0
A
答えて
0
ソリューションは、本当に簡単です。あなただけの適切redux-form
流れに従うと、redux-form
からField
によって定義されたonChange
を呼び出す必要があります。誰もがあなたの問題を理解し、あなたを支援できるようにするために
import React from 'react';
import { SelectField as MUISelectField } from "redux-form-material-ui";
export class SelectField extends React.Component {
constructor(props) {
super(props);
this.chooseSingleOption();
}
componentDidUpdate(prevProps, prevState) {
if (prevProps.children !== this.props.children) {
this.chooseSingleOption();
}
}
chooseSingleOption() {
const children = React.Children.toArray(this.props.children);
if (children.length === 1) {
this.props.input.onChange(children[0].props.value);
}
}
render() {
return (
<MUISelectField {...this.props}/>
)
}
}
0
驚いたことに答えは「いいえ」と思われます。少なくとも、小道具を渡すのと同じくらい簡単ではないようです。
素材-ui(元は、Redux形式ではありません)doesn't support the defaultValue
option for SelectFieldです。私もsimilar thread for Redux-formが見つかりました。
アレイ内に常にSelectField
オプションのデータがある場合は、まだ解決できます。次に、配列をMenuItem
の配列に変換する関数を持つことができます。
// example option data
const optionDataArray = [{ value: "first option", key: 0 }, { value: "second option", key: 1 }];
const toMenuItem = menuData =>
(<MenuItem value={value} key={key} primaryText={ value } />)
);
次にあなたが
<SelectField value={
optionDataArray.length === 1 ?
optionDataArray[0].value :
null
} >
{ optionDataArray.map(toMenuItem) }
</SelectField>
のようにそれらをレンダリングすることができ、私はこれを試していないが、うまくいけば、これは事前に選択された入力とコンポーネントを制御1項目SelectFieldsになります。私は何も提供していないかのようにnull値が解釈されることを望んでいます。
しかし、第2の仮定/希望が真でない場合、あなたはおそらく、このような機能を作ることができます:
const getSelectFieldValueProp = allOptionData => {
if(allOptionData.length == 1) {
return { value: allOptionData[0].value }
} else {
return {};
}
}
そして、そのように一つだけ
<SelectField {...getSelectFieldValueProp(optionDataArray) } >
{ optionDataArray.map(toMenuItem) }
</SelectField>
のようにそれを使用します-item SelectFieldsは値propを取得する必要があります。
関連する問題
- 1. 単一のtableView行を選択してください
- 2. 選択オプションをテキストで選択してください。
- 3. req.responseTextに基づいてオプションを選択してください
- 4. parentsと一緒に選択したオプションを削除してください。
- 5. オプションを追加してjQueryでそのオプションを選択してください
- 6. 入力タイプをJavascriptのオプションで選択してください。
- 7. LocalStorage:Disabledオプションの空白を選択してください
- 8. 複数のオプションを選択してください
- 9. Python - Seleniumのリストからオプションを選択してください
- 10. V-modelで最初に選択したオプションを選択してください。
- 11. Jquery単に要素を選択し、そのオプションを選択しないでください
- 12. 別の値を選択してもう一度選択してください
- 13. django multivaluefield&multiwidget - オプションを1つ選択してください
- 14. オプションを選択してくださいonclick change font-family
- 15. PostgreSQL:単列xの量を選択してください
- 16. SQL - 一人一レコードランダムに選択してください
- 17. MySQLカラムの一部のみを選択してください
- 18. 単一クエリで文書の要素を選択しないでください
- 19. Sencha Touch 2の選択したオプションを設定するselectfield
- 20. 選択/オプションにui-srefを入れてください
- 21. ドロップダウンリストからデータテーブルの行をクリックしてオプションを選択してください
- 22. Jquery:Reset(enable)以前は無効だったオプションを選択してください
- 23. DISTINCTを選択してください。
- 24. オンチェンジを選択してください
- 25. 一致する列を選択してください
- 26. 他に基づいて選択してください選択
- 27. optgroup内のすべてのオプションを選択してください
- 28. ボタンをクリックして選択オプションを繰り返してください。
- 29. <a>をクリックして選択オプションを変更してください
- 30. コマンドパラメータの選択を選択してください
あなたの質問はあまりにも漠然として広いです。ヘルプページ、特に[ここではどのトピックについて聞かせていただけますか?](http://stackoverflow.com/help/on-topic)と[質問しないでください。」](http://stackoverflow.com/help/dont-ask)。さらに重要なことは、[Stack Overflow question checklist](http://meta.stackexchange.com/q/156810/204922)をお読みください。また、[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)についても知りたいことがあります。 – Chris
あなたはいくつかのコードを追加することはできますか? – Dekel