REACT js - 使用 antd datepicker 值更新状态
REACT js - Updating state with antd datepicker value
我正在尝试为一个简单的应用程序创建一个表单,该应用程序应该将一些数据更新到后端。
在表单中我有多个输入,现在我正在使用一个 onChange 处理程序处理所有输入,一旦我添加了一个日期选择器,我就无法访问他的值或用日期更新状态已选。
我得到的错误是:“未捕获类型错误:无法读取未定义的属性(读取 'value')”
我知道 antd datepicker 需要一个不接收事件但接收 moment 对象和字符串的处理程序(根据 antd 文档 here)
现在最大的问题是,我如何用那个日期更新状态?
最好的选择是使用一个处理程序,但最重要的是更新状态。
这里是我的代码:
const Nuovo = ( )=> {
const [lavorazione, setLavorazione] = useState({
numero : 0,
date:'',
nome :'',
cognome : '',
nomeAzienda: '',
modello :'',
targa : '',
telefono : '',
mail : '',
quantità: 0 ,
misura : '',
marca : '',
cerchi :'' ,
})
const [success, setSuccess]= useState(false)
const dateFormat = 'DD/MM/YYYY'
// updating db
const addLavorazione = (lavorazione)=>{
const db = getDatabase();
set(ref(db,'lavorazione/'+ lavorazione.numero),lavorazione)
setSuccess(true);
clear()
console.log('[LAVORAZIONE]',lavorazione)
console.log('[PRE-TIMEOUT',success)
setTimeout(()=>{
setSuccess(false)
console.log('[TIMEOUT]',success)
},5000)
}
//2WAY BINDING FORM
function onChange (e){
const value = e.target.value;
setLavorazione({
...lavorazione,
[e.target.name]:value
});
console.log('[CHANGE-VALUE]', value)
}
const [form] = Form.useForm();
const clear =()=>{
form.resetFields()
}
return(
<Form
form={form}
layout='vertical'
onFinish={addLavorazione}
autoComplete="off">
<Row >
<Col lg={12} xs={24} sm={24} className='form-container'>
<h2>CODICE LAVORAZIONE</h2>
<Form.Item
name="numero"
label="Numero"
rules={[{ required: true }, ]}
>
<Input placeholder='Numero'
value={lavorazione.numero}
name='numero'
onChange={onChange} />
</Form.Item>
<Space direction="vertical">
<DatePicker onChange={onChange} format ={dateFormat} placeholder='Scegli la Data' name='date' value={lavorazione.date} />
</Space>
<h2>ANAGRAFICA CLIENTE</h2>
<Form.Item
name="nome"
label="Nome"
rules={[{ required: true }, { type: 'string', min: 3 }]}
>
<Input placeholder='Nome'
value={lavorazione.nome}
name='nome'
onChange={onChange} />
</Form.Item>
<Form.Item
name="cognome"
label="Cognome"
rules={[{ required: true }, { type: 'string', min: 3 }]}
>
<Input placeholder='Cognome'
value={lavorazione.cognome }
name='cognome'
onChange={onChange} />
</Form.Item>
//... many other inputs down here
</Col>
</Row>
</Form>
)
}
export default Nuovo
提前感谢大家的宝贵时间!!!!
您可以将自定义对象传递给 onChange
函数
<DatePicker
onChange={(value) =>
onChange({ target: { value, name: "date" } })
}
format={dateFormat}
placeholder="Scegli la Data"
name="date"
value={lavorazione.date}
/>
我正在尝试为一个简单的应用程序创建一个表单,该应用程序应该将一些数据更新到后端。
在表单中我有多个输入,现在我正在使用一个 onChange 处理程序处理所有输入,一旦我添加了一个日期选择器,我就无法访问他的值或用日期更新状态已选。
我得到的错误是:“未捕获类型错误:无法读取未定义的属性(读取 'value')”
我知道 antd datepicker 需要一个不接收事件但接收 moment 对象和字符串的处理程序(根据 antd 文档 here)
现在最大的问题是,我如何用那个日期更新状态?
最好的选择是使用一个处理程序,但最重要的是更新状态。
这里是我的代码:
const Nuovo = ( )=> {
const [lavorazione, setLavorazione] = useState({
numero : 0,
date:'',
nome :'',
cognome : '',
nomeAzienda: '',
modello :'',
targa : '',
telefono : '',
mail : '',
quantità: 0 ,
misura : '',
marca : '',
cerchi :'' ,
})
const [success, setSuccess]= useState(false)
const dateFormat = 'DD/MM/YYYY'
// updating db
const addLavorazione = (lavorazione)=>{
const db = getDatabase();
set(ref(db,'lavorazione/'+ lavorazione.numero),lavorazione)
setSuccess(true);
clear()
console.log('[LAVORAZIONE]',lavorazione)
console.log('[PRE-TIMEOUT',success)
setTimeout(()=>{
setSuccess(false)
console.log('[TIMEOUT]',success)
},5000)
}
//2WAY BINDING FORM
function onChange (e){
const value = e.target.value;
setLavorazione({
...lavorazione,
[e.target.name]:value
});
console.log('[CHANGE-VALUE]', value)
}
const [form] = Form.useForm();
const clear =()=>{
form.resetFields()
}
return(
<Form
form={form}
layout='vertical'
onFinish={addLavorazione}
autoComplete="off">
<Row >
<Col lg={12} xs={24} sm={24} className='form-container'>
<h2>CODICE LAVORAZIONE</h2>
<Form.Item
name="numero"
label="Numero"
rules={[{ required: true }, ]}
>
<Input placeholder='Numero'
value={lavorazione.numero}
name='numero'
onChange={onChange} />
</Form.Item>
<Space direction="vertical">
<DatePicker onChange={onChange} format ={dateFormat} placeholder='Scegli la Data' name='date' value={lavorazione.date} />
</Space>
<h2>ANAGRAFICA CLIENTE</h2>
<Form.Item
name="nome"
label="Nome"
rules={[{ required: true }, { type: 'string', min: 3 }]}
>
<Input placeholder='Nome'
value={lavorazione.nome}
name='nome'
onChange={onChange} />
</Form.Item>
<Form.Item
name="cognome"
label="Cognome"
rules={[{ required: true }, { type: 'string', min: 3 }]}
>
<Input placeholder='Cognome'
value={lavorazione.cognome }
name='cognome'
onChange={onChange} />
</Form.Item>
//... many other inputs down here
</Col>
</Row>
</Form>
)
}
export default Nuovo
提前感谢大家的宝贵时间!!!!
您可以将自定义对象传递给 onChange
函数
<DatePicker
onChange={(value) =>
onChange({ target: { value, name: "date" } })
}
format={dateFormat}
placeholder="Scegli la Data"
name="date"
value={lavorazione.date}
/>