ReactJS - ReactiveSearch - Evento personalizado en la selección de sugerencias

jrkt

Estoy construyendo un componente de autocompletar para buscar usuarios actuales y agregarlos a un equipo. La búsqueda funciona bien, excepto que necesito personalizar un par de cosas que no sé cómo hacer.

Primero, este componente está modelado a partir del modal de invitar al usuario de GitHub. Puede comenzar a escribir para buscar un usuario actual y completará los resultados que encuentre. Sin embargo, si no encuentra ningún resultado, solo muestra un elemento para invitar a ese usuario por correo electrónico. ¿Cómo puedo editar el estado completo de la lista de resultados para un componente DataSearch ? Todo lo que puedo ver es editar el contenido de cada sugerencia a través del onSuggestionaccesorio. Necesito poder decir: "Si no hay resultados, muestre esto".

En segundo lugar, cuando se selecciona una sugerencia de la lista de resultados de autocompletar, necesito poder restablecer el cuadro de búsqueda porque estoy completando una lista que el usuario puede ver. En este momento, el cuadro de búsqueda se completa con el valor de la sugerencia. Por lo tanto, estoy completando la lista a continuación de resultados seleccionados muy bien; pero todavía necesito poder restablecer el cuadro de búsqueda cuando se selecciona ese resultado.

¿¿¿¿Ayudar????

Divyanshu Maithani

Enlace CodeSandbox

Para la primera parte del problema, puede usar el accesorio onNoResultsen cualquiera de los componentes de resultados para renderizar JSX personalizado cuando no se encuentran resultados. De los documentos :

onNoResults String o JSX [opcional]

muestra un mensaje o componente personalizado cuando no se encuentran resultados.

<ResultList
    ...
    // custom JSX when no results are found
    onNoResults={
        <section>
            <input />
            <button>Add</button>
        </section>
    }
/>

Para la segunda parte del problema, hay dos formas en que IMO puede abordar esto.

  1. Usando un ReactiveComponent que le permite crear un componente ReactiveSearch personalizado.
  2. Usando customQuery

Explicaré cómo abordar esto usando, customQuerypero podría ser mejor crear un componente personalizado según el enfoque que se adapte mejor a sus necesidades.

En el ejemplo que he compartido, mi búsqueda de datos se ve así:

<DataSearch
    title="DataSearch"
    dataField={["original_title", "original_title.search"]}
    categoryField="authors.raw"
    componentId="BookSensor"
    customQuery={this.customQuery}
    defaultSelected={this.state.value}
    onValueSelected={this.updateState}
/>

La razón para usar un customQueryes tener control total de qué consulta se aplica para recuperar los resultados. ReactiveSearch está diseñado para funcionar de forma reactiva . Cuando se establece un valor en el DataSearch, ResultListreaccionará a este cambio. Tener un customQuerynos permite controlar qué consulta se activa para este cambio. Además, mantengo el valor de DataSearchen el estado para poder aclararlo cuando se activa la consulta. Esto es lo que estoy usando en el ejemplo:

customQuery = (value, props) => {
    // find the current query using defaultQuery from DataSearch
    const currentQuery = DataSearch.defaultQuery(value, props);
    // clear the value in component's state
    this.setState({
      value: ""
    });
    if (value.length) {
      // store this query
      this.prevQuery = currentQuery;
      return currentQuery;
    }
    // if the value is empty, that is it was cleared, return the previous query instead
    return this.prevQuery;
  };

Entonces, cada vez que se borra el valor, simplemente devuelvo la consulta anterior para que la lista de resultados muestre los resultados correctos para la consulta anterior (antes de que se borrara el valor).

También para controlar el valor de DataSearchmi componente, estoy usando defaultSelectedy onValueSelectedprops. Funcionan de manera bastante similar a cómo crearía un componente controlado en reaccionar. Docs

Nuevamente, podría ser mejor crear un componente personalizado usando ReactiveComponent si este enfoque suena complicado para personalizar este flujo.

Demostración para esta respuesta usando customQuery

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Cómo usar la selección en los proveedores de sugerencias de búsqueda de Azure

ReactJS: desencadenar evento incluso si se selecciona la misma opción en el menú desplegable de selección

Evento personalizado en la clase de JavaScript

Cómo manejar la selección de timepicker en reactjs

¿Cómo agregar sugerencias de tipo para la clase con serializador personalizado en lift-json?

¿A quién seguir la función de sugerencias en Nodejs?

¿Cómo poner un botón personalizado en un menú de sugerencias de búsqueda?

Sugerencias para la programación declarativa de GUI en Java

Omitir sugerencias de tipo en la documentación

Desencadenar evento en el elemento de correo de selección o cambiar la selección del elemento de correo

La clase de evento de selección envuelta en una función no puede funcionar

La aplicación del buzón de sugerencias no muestra sugerencias

¿Cómo limitar la cantidad de seleccionados en el menú de selección personalizado en javascript?

Evento sobre el cambio en la etiqueta de selección en Django

Cree un evento personalizado dentro de la clase en TypeScript

Cambiar la activación del evento demasiado pronto en el cuadro de selección

Mostrar formulario de selección personalizado en la ventana "Vista rápida" en WooCommerce

Mostrar formulario de selección personalizado en la ventana "Vista rápida" en WooCommerce

Restablecer la selección de jQuery Raty en el evento de clic (jQuery)

No se pudo recoger el evento de cambio en la segunda lista de selección

Cómo deshabilitar el evento de rotación de la bola de seguimiento y llamar al evento de rotación personalizado y establecer la velocidad de rotación en un evento personalizado

Cómo extender la selección de rango de fechas personalizado en bootstrape daterangepicker

Cómo extender la selección de rango de fechas personalizado en bootstrape daterangepicker

Los datos no se completaron en la etiqueta de opción de selección en REACTJS

No se puede activar el evento onchange desde la etiqueta de selección en ASP.Net

No se puede activar el evento onchange desde la etiqueta de selección en ASP.Net

Cuadro de entrada en reaccionar para mostrar sugerencias en reactjs

Cómo evitar la selección en la opción de selección de diálogo de información sobre herramientas desencadenar el evento onmouseleave

Cómo usar una selección con opciones en lugar de dos botones para el evento onClick ReactJS

TOP Lista

CalienteEtiquetas

Archivo