Actualmente estoy trabajando en una biblioteca para reaccionar y no sé exactamente cómo técnicamente puedo implementar una característica que tengo en mente.
Básicamente es una biblioteca de validación de formularios y toda la configuración va como un parámetro para el gancho. Tiene este aspecto:
const myFormReferenceObject = useForm({ onSubmit: (values) => { // do whatever you want with the values }, initialState: record, formatMessage: translate, submitUnmountedFields: false });La cuestión es que creo que podría ser muy útil tener algún tipo de configuración global para que no tengas que repetirte 100 veces para cada formulario que construyas.
Mi primera idea fue hacerlo como axios, donde creas una instancia de axios y configuras la instancia globalmente. Ahora, no tengo un objeto de instancia ya que simplemente llamo a un enlace de función/reacción.
Luego tuve la idea de tener un espacio de nombres en el objeto de la ventana con la configuración allí. Entonces mi gancho siempre podría verificar si hay una configuración en esa ventana ["espacio de nombres"] para configurar o anular todos los formularios a la vez.
Otra forma de hacerlo, tal vez más reactiva, sería crear un contexto para la configuración. Pero para ser honesto, realmente no quiero hacerlo de esta manera, porque la biblioteca en sí es muy simple y fácil de usar. 1. Llame al enlace para crear un formulario, 2. pase la referencia del formulario a cada campo de entrada con validador de nivel de campo y accesorios, etc. Me gusta la simplicidad y agregar un contexto destruye un poco la simplicidad ya que siempre tiene que rodear sus componentes con un contexto . Por otro lado, podría tener múltiples contextos para diferentes módulos en la aplicación, lo que también sería genial.
¿Tienes una idea mejor o crees que debería optar por el método de la ventana?
Si tiene una configuración global, puede simplemente distribuirla al llamar a useForm .
const myFormReferenceObject = useForm({ ...myGlobalConfig, onSubmit: (values) => { // do whatever you want with the values }, }); Además, si usa el enfoque de ventana, puede hacer window[a symbol] en lugar de window[a string] para evitar conflictos.