Tengo un componente React Form que recibe un objeto de estado. El formulario contiene un par de componentes Form.Item, una entrada antd y una casilla de verificación antd. Tengo el siguiente código en mi componente de formulario:
const RecordsForm = ({ selectedRecord, recordComponentForm }) => { useEffect(() => { debugger; recordComponentForm.setFieldsValue({ Title: selectedRecord ? selectedRecord.Title : null, IsCurrentRecord: selectedRecord ? selectedRecord.IsCurrentRecord : true, }); }, [recordComponentForm, selectedRecord]); return ( <Form name="seasonForm" autoComplete="off" layout={"inline"} form={recordComponentForm} > <Form.Item label="Title" name="Title" rules={[{ required: true, message: "Add a Title" }]} > <Input name="Title" placeholder="Season Title" /> </Form.Item> <Form.Item label="Is Active Record" name="IsCurrentRecord" valuePropName="checked" > <Checkbox name="IsCurrentRecord" /> </Form.Item> </Form> ); }; export default RecordsForm; donde se crea una instancia del prop recordComponentForm proporcionado en el componente principal: const [recordComponentForm] = Form.useForm();
Cuando ejecuto la aplicación y obligo a este componente a recargar con un nuevo selectedRecord , quiero que el valor de Form.Item Input cambie al Title del objeto y la Checkbox de verificación refleje el valor booleano IsCurrentRecord del objeto. El objeto pasado se ve así:
El valor de Entrada de título cambia para mostrar el Título del objeto, sin embargo, la casilla de verificación permanece sin cambios:
Me gustaría que la casilla de verificación cambie su valor checked según lo que ingrese en el objeto selectedRecord.IsCurrentRecord de la misma manera que lo hace el Título. Cualquier consejo sería muy apreciado.
Tal vez ... simplemente elimine el name de la casilla de verificación.
<Form.Item label="Is Active Record" name="IsCurrentRecord" valuePropName="checked" > <Checkbox /> </Form.Item> La casilla de verificación generalmente devuelve un valor de opciones (no booleano), por lo que quizás debería usar el componente Switch en su lugar. Pero al usar valuePropName="checked" , podríamos obtener valores booleanos de Checkbox.
Este fue simplemente un caso de Form.Items comparten el mismo nombre y el componente secundario que contiene. Una vez que cambié el nombre de Form.Item para Checkbox a algo así como IsCurrentRecord_FI y lo mencioné como tal, comenzó a funcionar.