Ganchos de entidad
Descripción general
Los ganchos de entidad son ganchos de React generados que proporcionan un acceso simplificado y con seguridad de tipos a los datos y la lógica administrados por los proveedores de entidad. Los componentes secundarios del proveedor de entidad pueden aprovechar estos ganchos para leer fácilmente el contexto de React de la entidad. Esto otorga a los componentes acceso al estado actual de React, a la información relacionada con el esquema y a los resultados de validación; disponibles tanto al nivel de la entidad como al del campo individual.
Uso de ganchos de entidad
Como se explica en Contrato de la API de extensiones de la interfaz de usuario del SDK de Digital, el generador del SDK de Jutro crea un directorio para cada entidad utilizada por cada una de las API disponibles en un SDK generado. Puede importar los ganchos de entidad desde la ruta raíz del directorio de entidades.
Se nombran siguiendo el patrón use<entity-name>, y deben ser utilizados por componentes secundarios de su proveedor de entidad asociado.
// import path 'src/generated/JutroUtils/<sdk-name>/<api-name>/<entity-name>'
// for a "Contact" entity in the "account" API of an SDK named "PcSDK"
import {
ContactProvider,
useContact,
} from 'src/generated/JutroUtils/PcSDK/account/Contact';
export const ContactPage = (): JSX.Element => (
<ContactProvider>
<ContactForm />
</ContactProvider>
);
const ContactForm = (): JSX.Element => {
const {
state,
setState,
schema,
validationResult,
showSchemaValidationErrors,
fields,
} = useContact();
// ...
};
Devolver valor
Los ganchos de entidad devuelven un solo objeto con las siguientes propiedades.
state y setState
La propiedad state es una variable de estado de React que almacena los datos actuales de la entidad, y la propiedad setState es una función de establecimiento de estado de React que se puede utilizar para cambiar el state. Utilizan el tipo de entidad correspondiente disponible en el SDK de Digital.
state, se activará el proveedor de la entidad para que vuelva a ejecutar las funciones de esquema y de validación de la entidad.En el siguiente ejemplo se utiliza state y setState para renderizar una entrada controlada para el campo displayName de una entidad “Contact”.
// ...
const { state, setState } = useContact();
return (
<label>
Enter your name:
<input
type="text"
value={state.displayName}
onChange={(e) =>
setState((prev) => ({ ...prev, displayName: e.target.value }))
}
/>
</label>
);
};
schema
La propiedad schema es el valor devuelto tras la llamada a la función getEntitySchema del SDK de Digital.
state actual como argumento y se asegura de que las reglas del esquema se vuelvan a evaluar con este estado.Para obtener más información sobre los esquemas de entidad, consulte los documentos del SDK de Digital.
validationResult
Esta propiedad contiene el resultado de ejecutar la función de validación de la entidad disponible en el SDK de Digital.
validationResult esté actualizado con el state actual.Como se explica en los documentos del SDK de Digital, el objeto validationResult indica si la entidad isValid después de aplicar la validación del esquema JSON al state actual y proporciona una matriz de errors en caso de que no sea válida.
showSchemaValidationErrors
La propiedad showSchemaValidationErrors proviene directamente de la propiedad definida por el usuario del proveedor de la entidad.
Este es un valor booleano utilizado por los componentes de campo generados para alternar la visualización de errores de validación. Si se utiliza showSchemaValidationErrors junto con validationResult, podrá sincronizar los componentes personalizados con este comportamiento de los componentes de campo generados.
fields
En estos casos habrá una propiedad fields que estará disponible:
- El esquema de la entidad es un tipo
JSONSchemaWithFields. - El esquema de la entidad es un
JSONSchemaGWy el indicadordangerouslyForceEntityFieldGenerationse usó en la generación. - El esquema de la entidad es un tipo
JSONSchemaCoverage.
Esta propiedad es un objeto con tantas propiedades como objetos JSONSchemaField se definan en el esquema y que utiliza el nombre del campo como clave.
const { fields } = useContact();
const { displayName, email, phoneNumber } = fields;
JSONSchemaCoverage, el valor de la propiedad selected se agregará al objeto de campos devueltos.Las entidades Jobline también pueden generar campos adicionales. Para obtener más información, consulte la página Cómo trabajar con JobLines.
Como valor, cada una de estas propiedades contiene un objeto con información relevante sobre el campo correspondiente, extraída de los datos disponibles en el proveedor de la entidad. Encontrará más información sobre el contenido de este objeto en la sección de propiedades al nivel del campo.
Propiedades al nivel del campo
Estas propiedades proporcionan acceso directo a la información relacionada con el campo y a la lógica que ya está disponible al nivel de la entidad. Esto simplifica el acceso a los detalles específicos del campo, ya que elimina la necesidad de atravesar manualmente la estructura de datos de la entidad.
state y setState
Son equivalentes a las propiedades state y setState al nivel de la entidad, pero su objetivo es un solo campo en el estado mediante la definición de tipo del SDK de Digital del campo correspondiente.
Por ejemplo, podemos volver a escribir el código de muestra desde la sección state y setState al nivel de la entidad para usar state y setState al nivel del campo así:
// ...
const { fields } = useContact();
const { displayName } = fields;
const { state, setState } = displayName;
return (
<label>
Enter your name:
<input
type="text"
value={state}
onChange={(e) => setState(e.target.value)}
/>
</label>
);
};
errors
La propiedad errors del campo es una versión filtrada de la matriz errors devuelta por validationResult de la entidad. Incluirá solo a los miembros de esa matriz que se relacionan con el campo específico.
Puede usarla para obtener los mensajes de error relevantes para el campo.
fieldSchema
La propiedad fieldSchema del campo es un acceso directo al atributo properties.fieldName del esquema de la entidad.
Es equivalente a acceder a la propiedad correspondiente del schema de la entidad.
const { schema } = usePhoneNumber();
const numberSchema = schema.properties.number;
//////
const { fields } = usePhoneNumber();
const { number } = fields;
const { fieldSchema: numberSchema } = number;
Propiedades de entrada HTML
Son accesos directos convenientes que proporcionan asignación directa entre la información disponible en el schema de la entidad y un conjunto de atributos estándares HTML para las entradas, lo que reduce la cantidad de lógica de transformación necesaria para renderizar los campos de entrada.
disabledse establece entruesi el campo está marcado como x-gw-forbidden.labeles el valor deschema.properties.<field-name>.title.titlees el valor deschema.properties.<field-name>.description.readOnlyes el valor deschema.properties.<field-name>.readOnly.requiredse establece entruesi el campo está marcado con una de las propiedades x-gw-requiredFor.maxLengthes el valor de la propiedad x-gw-maximum para este campo, si está presente.minLengthes el valor de la propiedad x-gw-minimum para este campo, si está presente.
// ...
const { fields } = useContact();
const { displayName } = fields;
const {
state,
setState,
required,
disabled,
label,
title,
readOnly,
maxLength,
minLength,
} = displayName;
return (
<label>
{label}
<input
type="text"
value={state}
onChange={(e) => setState(e.target.value)}
required={required}
disabled={disabled}
title={title}
readOnly={readOnly}
maxLength={maxLength}
minLength={minLength}
/>
</label>
);
};