es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo puedo hacer una representación condicional de un resultado del método filter en React?

Tengo un componente padre que pasa a un componente hijo todos los activos disponibles para alquilar y luego lo renderiza… En el mismo componente tengo una barra de búsqueda que debería hacer que la búsqueda sea mucho más fácil y quiero que como resultado de la entrada, se renderice la(s) tarjeta(s) específica(s) que coincida(n) con la búsqueda… Si no se inserta nada en la barra de búsqueda, renderiza todos los activos, si el usuario escribe el nombre del activo y coincide con uno o muchos de los activos, renderizará el/los activo(s) correspondientes.

Aquí está mi código…

class AllAssets extends Component {

state = {
    cards: [],
    searchField: ''
  }

async componentDidMount() {
    const { data } = await cardService.getAllCards();
    if (data.length > 0) this.setState({ cards: data });
  }

addToFavorites = (cardId, userId) => {
    saveToFavorites(cardId, userId)
    toast.error("El activo fue agregado a tus favoritos.")
  }

render() {

const { cards, searchField } = this.state;
const user = getCurrentUser();

const filteredAssets = cards.filter(card => (
  card.assetName.toLowerCase().includes(searchField.toLowerCase())
))
console.log(filteredAssets);

return (
  <div classname="container">
    <searchbox placeholder="{"Ingrese" el="" nombre="" del="" activo..."}="" handlechange="{(e)" ==""> this.setState({ searchField: e.target.value })}
    />
    <pageheader>Activos disponibles para alquilar</pageheader>
    <div classname="row">
      <div classname="col-12 mt-4">
        {cards.length > 0 && <p>también puede agregar activos específicos a tus favoritos y volver a ellos más tarde...</p>}
      </div>
    </div>
    <div classname="row">
      {filteredAssets.length > 0 ? filteredAssets.map(card => <cardpublic addtofavorites="{this.addToFavorites}" card="{card}" user="{user}" key="{card._id}"></cardpublic>) :
        cards.map(card => <cardpublic addtofavorites="{this.addToFavorites}" card="{card}" user="{user}" key="{card._id}"></cardpublic>)
      }
    </div>
  </searchbox></div>
);
}
}

export default AllAssets;

Intenté con el operador ternario pero no funciona…

{filteredAssets.length > 0 ? filteredAssets.map(card => ) :
cards.map(card => )
}

En la consola los resultados son correctos… Muchas gracias de antemano…

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás tratando de usar un operador ternario para filtrar las cartas basado en el campo de búsqueda. Sin embargo, la condición que estás usando es cards.filteredAssets === true, lo cual siempre será falso ya que cards.filteredAssets es undefined.

    Deberías usar la variable filteredAssets que creaste anteriormente en su lugar:

    {filteredAssets.length ? filteredAssets.map(card => )
    cards.map(card => )
    }

Comments are closed.