Redux 表单自定义下拉菜单
Redux Form Custom Dropdown Menu
我正在尝试使用 redux 表单创建下拉菜单选择,这是我的表单代码:
<form
onSubmit={handleSubmit(this.dialogSubmitHandler.bind(this))}
style={{
width: '80%'
}}
>
<Field
label="Type"
name="type"
component={this.renderSelection}
>
<MenuItem value={'price'} primaryText="Price" />
<MenuItem value={'volume'} primaryText="Volume" />
<MenuItem value={'dailyHigh'} primaryText="Daily High" />
<MenuItem value={'dailyLow'} primaryText="Daily Low" />
<MenuItem value={'sma'} primaryText="SMA" />
<MenuItem value={'rsi'} primaryText="RSI" />
<MenuItem value={'macd'} primaryText="MACD" />
</Field>
</form>
这是我的 renderSelection 代码:
renderSelection(props) {
const {
meta: { touched, error },
label,
onChange
} = props;
const errText = touched && error ? error : '';
return (
<SelectField
floatingLabelText={label}
errorText={errText}
{...props}
onChange={(e, index, val) => onChange(val)}
maxHeight={200}
>
</SelectField>
);
}
这里的问题是,这会引发一个错误,即 "props.onChange" 不是一个函数,而在此处的示例中:https://redux-form.com/6.0.0-rc.1/examples/material-ui/,他们正是这样做的。
知道是什么导致道具没有 onChange 功能吗?
好的,事实证明,redux 表单在用于非文本输入的内容时效果不佳。因此,您要做的就是假装下拉菜单是文本输入。使用这个想法,每当发生选择时,将该选择值传递给文本输入的 onChange 函数。这会将文本输入的值设置为选择值。最后,将选择字段的值设置为文本输入的值。这是我的代码:
renderSelection(props) {
const {
meta: { touched, error },
label,
input: { onChange, value }
} = props;
const errText = touched && error ? error : '';
return (
<SelectField
floatingLabelText={label}
errorText={errText}
{...props}
value={value}
onChange={(e, index, val) => {
onChange(val);
}}
maxHeight={200}
>
</SelectField>
);
}
我正在尝试使用 redux 表单创建下拉菜单选择,这是我的表单代码:
<form
onSubmit={handleSubmit(this.dialogSubmitHandler.bind(this))}
style={{
width: '80%'
}}
>
<Field
label="Type"
name="type"
component={this.renderSelection}
>
<MenuItem value={'price'} primaryText="Price" />
<MenuItem value={'volume'} primaryText="Volume" />
<MenuItem value={'dailyHigh'} primaryText="Daily High" />
<MenuItem value={'dailyLow'} primaryText="Daily Low" />
<MenuItem value={'sma'} primaryText="SMA" />
<MenuItem value={'rsi'} primaryText="RSI" />
<MenuItem value={'macd'} primaryText="MACD" />
</Field>
</form>
这是我的 renderSelection 代码:
renderSelection(props) {
const {
meta: { touched, error },
label,
onChange
} = props;
const errText = touched && error ? error : '';
return (
<SelectField
floatingLabelText={label}
errorText={errText}
{...props}
onChange={(e, index, val) => onChange(val)}
maxHeight={200}
>
</SelectField>
);
}
这里的问题是,这会引发一个错误,即 "props.onChange" 不是一个函数,而在此处的示例中:https://redux-form.com/6.0.0-rc.1/examples/material-ui/,他们正是这样做的。
知道是什么导致道具没有 onChange 功能吗?
好的,事实证明,redux 表单在用于非文本输入的内容时效果不佳。因此,您要做的就是假装下拉菜单是文本输入。使用这个想法,每当发生选择时,将该选择值传递给文本输入的 onChange 函数。这会将文本输入的值设置为选择值。最后,将选择字段的值设置为文本输入的值。这是我的代码:
renderSelection(props) {
const {
meta: { touched, error },
label,
input: { onChange, value }
} = props;
const errText = touched && error ? error : '';
return (
<SelectField
floatingLabelText={label}
errorText={errText}
{...props}
value={value}
onChange={(e, index, val) => {
onChange(val);
}}
maxHeight={200}
>
</SelectField>
);
}