javascript - React - 更改输入时自动提交表单
问题描述
我正在尝试使用onChange
事件在 React 中自动提交表单。它适用于常规input
字段,但不知何故不适用于react-select。这是我的 React 组件的要点。
我专门尝试更新startDate
andendDate
属性。我也收到了这个警告:EducationForm is changing an uncontrolled input of type text to be controlled
。我怀疑这是因为startDate
并且endDate
没有初始值,所以我在构造函数中添加了这个:
this.state.attributes.startDate = ''
this.state.attributes.endDate = ''
但是,尽管如此,我仍然收到相同的警告。这是我尝试使用标签onChange
事件提交表单:Select
<Select
className='form-control'
name='startDate'
value={attributes.startDate}
required={true}
onChange={e => {
this.updateAttribute(e, 'startDate')
}}
options={this.options}
/>
<Select
className='form-control'
name='endDate'
value={attributes.endDate}
required={true}
onChange={e => {
this.updateAttribute(e, 'endDate')
}}
options={this.options}
/>
updateAttribute
调用submitForm
方法:
updateAttribute = (e: ReactEvent, attribute: string) => {
e.preventDefault && e.preventDefault()
const attributes = {
...this.state.attributes,
[attribute]: e.target ? e.target.value : e
}
this.setState({ attributes: attributes }, () => this.submitForm())
}
解决方案
您的问题出在您的onChange
处理程序中。React-Select 有一个非常具体的签名onChange
function (
One of <
Object,
Array<Object>,
null,
undefined
>,
{
action required One of <
"select-option",
"deselect-option",
"remove-value",
"pop-value",
"set-value",
"clear",
"create-option"
>
}
) => undefined
是的,大多数人对此感到困惑。然后,您的onChange
属性将变得更像这样:
onChange={(value, {action}) => this.updateValue(value, action)}
然后,您updateValue
的方法会根据所采取的操作类型作用于您选择的值更改。单选中的 React-Select 将为您提供value
所选option
对象(构成该对象的整个对象option
)。多选中的 React-Select 将为您提供一个对象数组作为value
. 你的value
类型是不同的,取决于它是单选还是多选,以及所action
采取的。
value
在这一点上,你用你的东西做什么取决于你。拿它value
,将适当的键应用于您要发布的数据对象,然后调用您想要保存数据的任何方法。
推荐阅读
- python - ffmpeg rtmp 在 youtube 上播放速度低于 1x
- javascript - Python中等效的ee.Image.not()是什么
- python - 具有对数采样时间间隔的 Pandas 数据帧插值
- python - Selenium 不会返回文本
- linux - perl 中的打开命令
- azure - Instagram ?__a=1 查询:为什么我得到登录页面而不是 JSON?
- node.js - nodejs 10 异步迭代的实际例子,比如比stream更能解决什么样的问题?
- python - Python 过程或面向对象
- javascript - 将屏幕重新编码视频块 blob 转换为多部分,以便在 Api 中作为多部分发送
- if-statement - AWK 问题:计算“不匹配”