redux-form字段值是否可以保存对象而不仅仅是字符串?
考虑以下示例
class SelectQuestions extends Component{
render(){
const {fields:{question1,question2},handleSubmit}=this.props;
return <div>
<form onSubmit={handleSumbit(this.handleFunction.bind(this))}>
<SelectQuestion {...question1}/>
<SelectQuestion {...question1}/>
<button type="submit" className="btn btn-default">Submit</button>
</form>
</div>
}
}
class SelectQuestion extends Component{
render (){
<select></select>
}
}
&#39; SelectQuestion&#39;需要一系列问题,每个问题都有问题ID和问题名称。
一旦用户选择了我想要返回QuesionId和QuesitonName的问题。如何在反应中使用redux-form实现它
答案 0 :(得分:5)
<强> TL:DR 强>
是的它可以容纳一个物体。看看这个例子: https://codesandbox.io/s/vq6k6195rl
<强>解释强>
对于选择,您可以像这样定义您的选择:
const myFancyQuestions = [
{ id: 1, label: 'Why?', category: 'Asking why' },
{ id: 2, label: 'Who?', category: 'Asking who' },
{ id: 3, label: 'When?', category: 'Asking when' }
];
然后使用Field组件包装组件。
<Field component={ObjectSelect} name="myFancySelect" options={myFancyQuestions}/>
然后在渲染中显示它:
class ObjectSelect extends React.Component {
render() {
const { input, multiple, options, value, ...rest } = this.props;
const parse = event => {
// This is what redux-form will hold:
return JSON.parse(event.target.value);
}
return (
<select
onBlur={event => input.onBlur(parse(event))}
onChange={event => input.onChange(parse(event))}
{...rest}>
{options.map(option =>
<option key={option.id}
value={JSON.stringify(option)}
selected={input.value.id == option.id}>
{option.label}
</option>)}
</select>
)
}
}
答案 1 :(得分:2)
是的,该值可以是一个复杂的对象。甚至有一个例子证明了这一点。
答案 2 :(得分:0)
我认为更好的方法是创建两个虚拟字段selectedQuestionId
和selectedQuestionName
。那些字段不显示。然后,每个SelectQuestion
都可以触发回调,如:
setSelectedQuestion = (event) => {
var questionName = event.target.name; //or something like that
var questionId = event.target.id; //or something like that
this.props.fields.selectedQuestionName.onChange(questionName );
this.props.fields.selectedQuestionId.onChange(questionId );
}
可以在redux-form字段上调用 onChange
以编程方式设置值。
答案 3 :(得分:0)
这有点晚了,但还是......
是的,它可以!您只需在此处使用FormSection。
它会将您的表单拆分为引擎盖下的对象,并将所有部分保留在单个表单对象中。
只需要将name
道具传递给FormSection,这将是您的子对象的名称。
import { FormSection } from 'redux-form';
render(){
return(
<form onSubmit={...}>
<FormSection name="firstGroup">
<SelectQuestion {...question1}/>
</FormSection>
<FormSection name="secondGroup">
<SelectQuestion {...question1}/>
</FormSection>
<button type="submit" className="btn btn-default">Submit</button>
</form>
)
}
然后通过Redux devTools检查表单结构。
享受;)
答案 4 :(得分:0)
这很简单,您只需添加“ .value”(或其他任何内容,即可)命名prop,它将创建对象并在更改时更新其中的值...
companyName: {
value:"<inputted string>"
}
您将获得对象:
W.2