¿Cómo se accede a un registro dentro de la función de edición sin tener que usar ?
Tengo un <Ressource>
declarado de la siguiente forma en App.tsx:
<Resource name="myresource" list={ListGuesser} edit={GenericEdit}/>
El código para GenericEdit:
const GenericEdit = function (props) {
console.log('props', props);
console.log('useResourceContext()', useResourceContext());
console.log('useRecordContext()', useRecordContext());
return (
<>
<Edit {...props}>
<SimpleForm>
<TextInput disabled label="Id" source="id" />
<TextInput label="Nombre" source="name" />
</SimpleForm>
</Edit>
</>)
};
export default GenericEdit;
La configuración predeterminada de <Edit><SimpleForm>
funciona bien (es decir, los datos del registro se representan dentro del formulario), sin embargo, me gustaría poder usar los datos de registro
de mi propia manera:
props
solo contiene metadatos (ruta de URL, tipo de recurso, etc.) + ID de registro, pero no otros datos del registrouseResourceContext()
devuelve el tipo de recurso (“campaign” en mi caso)useRecordContext()
no devuelve nada
P: ¿Cómo puedo acceder a los datos del registro dentro de mi función de edición (GenericEdit
) sin tener que depender de la funcionalidad predeterminada de <SimpleForm>
?
davy.ai
Dado que
useRecordContext()
no devuelve nada, sugiere que los datos de registro no se están pasando aGenericEdit
. Una forma de acceder a los datos de registro sería proporcionar tu propia implementación deuseRecordContext()
que recupere los datos de registro deldataProvider
. Podrías crear un nuevo hook llamadouseMyRecordContext()
que llame auseResourceContext()
para obtener el tipo de recurso, y luego llame adataProvider.getOne()
para recuperar los datos de registro de ese recurso e ID. Luego podrías llamar auseMyRecordContext()
dentro deGenericEdit
para acceder a los datos de registro.Aquí hay una implementación de ejemplo de
useMyRecordContext()
:Luego puedes llamar a
useMyRecordContext()
dentro deGenericEdit
de esta manera:Esta implementación recupera los datos de registro en el montaje utilizando
dataProvider.getOne()
, y los devuelve a través de la variablerecord
. Luego puedes usar estos datos para renderizar tus propias entradas de formulario personalizadas, en lugar de depender de la funcionalidad predeterminada deSimpleForm
.