Reactjs 反应选择仅在表单中包含值,而不是值:'';和标签:'';
我将Reactjs 反应选择仅在表单中包含值,而不是值:'';和标签:'';,reactjs,redux-form,acts-as-taggable-on,react-select,Reactjs,Redux Form,Acts As Taggable On,React Select,我将react select包含在我的rails项目中,在redux表单中,除了提交表单的后端不喜欢{value,label},一切都很好 我希望我的表单字段只包含一个值列表 这是我的表格代码: export const renderTagsSelect = props => { const { input, initialValues } = props; return ( <Creatable {...props} value={input
react select
包含在我的rails项目中,在redux表单中
,除了提交表单的后端不喜欢{value,label}
,一切都很好
我希望我的表单字段只包含一个值列表
这是我的表格代码:
export const renderTagsSelect = props => {
const { input, initialValues } = props;
return (
<Creatable
{...props}
value={input.value || initialValues}
resetValue={initialValues}
onChange={value => input.onChange(value)}
onBlur={() => input.onBlur(input.value)}
/>
);
};
render() {
<form onSubmit={handleSubmit(doSaveItem)}>
<Title>Modifica Item</Title>
<Field
name="title"
label="Titolo"
component={renderInput}
validate={required()}
/>
<br />
<span>Tags</span>
<br />
<TagsFormSelector name="tag_list" tags={item.tag_list} />
<SubmitButton type="submit" disabled={pristine || submitting}>
Salva modifiche
</SubmitButton>
</form>
}
我的后端是在rails中实现的,在上充当标记,更喜欢接收如下内容:
"tag_list: ["cena", "Paesaggi cittadini"]
对于未优化的情况,我更喜欢使用API的后端驱动器
如何做到这一点有什么线索吗 只需将函数引用传递给
onSubmit
属性,就可以在调用handleSubmit
之前创建一个新函数来格式化数据:
<form onSubmit={this.onSubmit}>
根据kuiro5的建议,我使用
normaliseData
函数将其固定在表单中:
在表格中
:
<form onSubmit={handleSubmit(doSaveItem)}>
[..]
<TagsFormSelector name="js_tag_list" tags={item.tag_list} />
[..]
const doSaveItem = (data, dispatch, props) => {
normaliseData(data);
return dispatch(saveItem(props.item.id, data)).catch(response => {
throw new SubmissionError(f.errorsFromProps(response));
});
};
normaliseData
:
const normaliseData = data => {
data["js_tag_list"] &&
(data["tag_list"] = data["js_tag_list"].map(tag => tag.value));
以及其他数据规范化
这使它起了作用
const doSaveItem = (data, dispatch, props) => {
normaliseData(data);
return dispatch(saveItem(props.item.id, data)).catch(response => {
throw new SubmissionError(f.errorsFromProps(response));
});
};
const normaliseData = data => {
data["js_tag_list"] &&
(data["tag_list"] = data["js_tag_list"].map(tag => tag.value));