Hooks
useData

useData

Hook personalizado para administrar y validar datos con múltiples opciones para manejar cambios, envío y estados de error.

Importación

Para importar el componente useData, se puede hacer desde fenextjs

import { useData } from "fenextjs";

Parámetros

ParámetroTipoRequeridoDefaultDescripcion
defaultDataTLos datos predeterminados para inicializar el hook.
optionsuseDataOptions<T, M, RT, RM, ET, EM>noUn objeto que contiene varias opciones de configuración para el hook.

useDataOptions

Opciones para personalizar el comportamiento del hook.

NombreDescripcion
dataDatos opcionales para sobrescribir los datos predeterminados.
refreshDataIfChangeDefaultDataOpciones para refrescar los datos si los datos predeterminados cambian.
onChangeDataAfterFunción de callback que se llama después de que los datos cambian.
onDeleteDataAfterFunción de callback que se llama después de que los datos se eliminan.
onMemoFunción de memoización para transformar los datos antes de pasarlos como valor memorizado.
memoDependenciesLista de variable que depende onMemo para actualizarce o ejecutarce.
validatorInstancia de clase validadora para validar los datos de data.
validatorMemoInstancia de clase validadora para validar los datos de dataMemo.
onSubmitDataFunción de callback para enviar los datos.
onAfterSubmitDataOkFunción de callback que se llama después de un envío éxitoso de datos.
onAfterSubmitParseErrorFunción de callback para manejar errores de análisis.
onAfterSubmitDataErrorFunción de callback para manejar errores después de enviar los datos.
afterSubmitDataSetIsChangeFalseDeterminar si se cambia el valor de isChange despues del terminar onSubmitData.
onSubmitDataMemoFunción de callback para enviar los datos de dataMemo.
onAfterSubmitDataMemoOkFunción de callback que se llama después de un envío éxitoso de datos de dataMemo.
onAfterSubmitParseErrorMemoFunción de callback para manejar errores de análisis de dataMemo.
onAfterSubmitDataMemoErrorFunción de callback para manejar errores después de enviar los datos de dataMemo.
afterSubmitDataMemoSetIsChangeFalseDeterminar si se cambia el valor de isChange despues del terminar onSubmitDataMemo.
autoOnValidateIndicador para validar automáticamente los datos.
env_logObjetos que determinar que variables se muestran en la consola.
useGlobalContextActivar contexto global para que la data que se maneje en distintos useData, con el mismo nombre de useGlobalContext, este sincronizada. (Solo funciona despues que window cargue). No se recomienda usar para datos sencibles.

useDataOptionsRefreshDataIfChangeDefaultDataOptions

Opciones para refrescar los datos cuando los datos predeterminados cambian.

NombreDescripcionDefault
activeIndicador para indicar si los datos deben actualizarse cuando cambian los datos predeterminados.false
useReloadKeyDataIndicador para recargar la clave de los datos cuando cambian los datos predeterminados.false

setDataOptions

Opciones para configurar los datos.

NombreDescripcionDefault
useOptionsOnChangeDataAfterIndicador para controlar si se debe usar el callback onChangeDataAfter al configurar los datos.true
useSetIsChangeIndicador para controlar si el estado isChange debe configurarse en true después de configurar los datos.true

Returns

ParametroTipoDescripcion
dataTDatos guardados en useData.
onChangeData(id: keyof T) => (value: typeof data[keyof T], _options?: onChangeDataOptionsProps<T>) => voidFunción para manejar los cambios en los datos.
onDeleteData(id: keyof T) => voidFunción para eliminar datos.
isChangebooleanValor que determina si la informacion guardada en data ha cambiado.
setData(nData: T, optionsData?: setDataOptions) => voidFunción para asignar nuevos datos.
setDataFunction(f: (p: T) => T, optionsData?: setDataOptions) => voidFunción para actualizar los datos usando una función.
dataMemoMDatos guardados en useData y transformados con la funcion onMemo proporcionada.
setIsChange(f: boolean) => voidFunción para actualizar la variable isChange.
onRestartfunctionFunción para restablecer los datos a su valor default.
onConcatData(v: Partial<T> | Array<T>) => voidFunción para concatenar nuevos datos a los datos actuales.
keyDatanumberValor de key asignado a data, que cambia con algunos acciones.
setKeyData(f: number) => voidFunción para actualizar la variable keyData.
onReloadKeyDatafunctionFunción para actualizar la variable keyData a un numero generado del Time.
validatorFenextjsValidatorClassValidador asignado a data.
validatorData{ [id in keyof T]?: FenextjsValidatorClass<any> | undefined; }Validador asignado a cada elemento de data.
validatorMemoFenextjsValidatorClassValidador asignado a dataMemo.
validatorDataMemo{ [id in keyof T]?: FenextjsValidatorClass<any> | undefined; }Validador asignado a cada elemento de dataMemo.
isValidDataboolean | ErrorFenextjsValor del resultado de validar data.
isValidDataMemoboolean | ErrorFenextjsValor del resultado de validar dataMemo.
onValidateDatafunctionFuncion para ejecutar validator a data y guardar el resultado en isValidData.
onValidateDataMemofunctionFuncion para ejecutar validatorMemo a dataMemo y guardar el resultado en isValidDataMemo.
onSubmitData(optionsSubmitData: { data?: T; onSaveData?: (p: { data: T; result: RT }) => T; useValidator?: boolean; }) => voidFunción para enviar los datos.
onSubmitDataMemo(optionsSubmitDataMemo: { dataMemo?: M; useValidatorMemo?: boolean; }) => voidFunción para enviar datos memorizados.
loaderSubmitbooleanValor que determina si esta procesando el envio de data con onSubmitData.
loaderSubmitMemobooleanValor que determina si esta procesando el envio de dataMemo con onSubmitDataMemo.
resultSubmitDataRTValor del resultado al ejecutar onSubmitData.
resultSubmitDataMemoRMValor del resultado al ejecutar onSubmitDataMemo.
dataErrorETValor del error al ejecutar onSubmitData en caso que ocurra un error.
dataErrorMemoEMValor del error al ejecutar onSubmitDataMemo en caso que ocurra un error.
setResultSubmitDataDispatch<SetStateAction<RT | undefined>>Funcion para modificar el valor de resultSubmitData.
setResultSubmitDataMemoDispatch<SetStateAction<RM | undefined>>Funcion para modificar el valor de resultSubmitDataMemo.
setDataErrorDispatch<SetStateAction<ET | undefined>>Funcion para modificar el valor de dataError.
setDataErrorMemoDispatch<SetStateAction<EM | undefined>>Funcion para modificar el valor de dataErrorMemo.

Usos

  • Ejecutar y Detectar acción
const { setData } = useData({
  defaultData: initialData,
  options: { onChangeDataAfter: console.log },
});
setData(newValue);
  • Definiendo interfaz
const { setData } = useData<{ name: string }>({
  defaultData: { name: "example" },
});
setData({ name: "new name" });
  • Usando para un formulario
interface useFormLoginDataProps {
    email: string;
    password: string;
}
const {
    data,
    onChangeData,
    onSubmitData,
    dataError,
    loaderSubmit,
    isValidData,
    validatorData,
} = useData<
    useFormLoginDataProps,
    any,
    useFormLoginResultProps,
    any,
    ErrorFenextjs | undefined
>(
    { email: '', password: '' },
    {
        onSubmitData: (data)=>{
            //proceso de login
        },
        validator: FenextjsValidator<useFormLoginDataProps>()
            .setName('onLogin')
            .isObject({
                email: FenextjsValidator()
                    .isString('Email requerido')
                    .isEmail('Email invalido')
                    .isRequired('Email requerido',
                password: FenextjsValidator()
                    .isString('Contraseña requerido')
                    .isRequired('Contraseña es requerida')
                    .isMinOrEqual(6, 'La contraseña es muy corta'),
            }),
        onAfterSubmitDataOk: async ({ result }) => {
            console.log("Ingreso éxitoso")
        },
        onAfterSubmitDataError: ({ error }) => {
            console.log("Ocurrio un error", error)
        },
    },
);
<FormBase  onSubmit={onSubmitData}>
    <InputText
        id="email"
        placeholder={'Correo electrónico'}
        validator={validatorData?.email}
        onChange={onChangeData('email')}
        defaultValue={data.email}
        errorWithIsChange={true}
    />
    <InputPassword
        id="password"
        placeholder={'Contraseña'}
        validator={validatorData?.password}
        onChange={onChangeData('password')}
        defaultValue={data.password}
        errorWithIsChange={true}
    />
    {dataError && <ErrorComponent error={dataError} />}
    <Button
        disabled={isValidData !== true}
        loader={loaderSubmit}
        onClick={onSubmitData}
        full={true}
        size="extra-strong"
    >
        Entrar
    </Button>
</FormBase>
 
  • Usando useGlobalContext
const DATA1 = useData<string>(
    "",
    {
        useGlobalContext:"name-of-context-custom"
    },
);
const DATA2 = useData<string>(
    "",
    {
        useGlobalContext:"name-of-context-custom"
    },
);
 
<Title>DATA1 value = {DATA1.data}</Title>
<Title>DATA2 value = {DATA2.data}</Title>
 
<Button
    onClick={()=>{
        DATA1.setData("value1")
    }}
>
    setData1 to "value1"
</Button>
<Button
    onClick={()=>{
        DATA2.setData("value2")
    }}
>
    setData2 to "value2"
</Button>