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 onSuggestion
accesorio. 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????
Para la primera parte del problema, puede usar el accesorio onNoResults
en 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.
Explicaré cómo abordar esto usando, customQuery
pero 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 customQuery
es 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
, ResultList
reaccionará a este cambio. Tener un customQuery
nos permite controlar qué consulta se activa para este cambio. Además, mantengo el valor de DataSearch
en 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 DataSearch
mi componente, estoy usando defaultSelected
y onValueSelected
props. 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.
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
Déjame decir algunas palabras