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.

“sequelize redux map no funciona cuando uso findAndCountAll”

Cuando uso findAll así:

try{
    const brands = await Brand.findAll({});
    res.status(200).json(brands);

}catch(err){
    console.error(err);
}

El árbol redux se ve así:

brand: {
list: [
  {
    id: 1,
    useYn: 'Y',
    createdAt: '2021-11-30T08:12:54.000Z',
    updatedAt: '2021-11-30T08:12:54.000Z'
  },

Así que puedo usar la lista con ‘useSelector ((state) => state.brand.list);’

Pero cuando uso findAndCountAll:

try{
    const brands = await Brand.findAndCountAll({});
    res.status(200).json(brands);

}catch(err){
    console.error(err);
}

Viene:

 brand: {
list: {
  count: 20,
  rows: [
    {
      id: 1,
      useYn: 'Y',
      createdAt: '2021-11-30T08:12:54.000Z',
      updatedAt: '2021-11-30T08:12:54.000Z'
    },

Así que he intentado

const brandList = useSelector((state) => state.brand.list); 
brandList.rows.map(()...

y

OCurre “Cannot read property ‘map’ of undefined”!

pero puedo acceder e imprimir count! (por brandList.count)

y la consola dice: {count: 20, rows: Array (20)} count: 20 rows: (20) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}],

diciendo que ‘rows’ es una matriz.

¿Qué está mal? Estoy realmente atascado.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es con el acceso a la función map() en brandList.rows, la cual es undefined.

    Cuando se utiliza findAll(), los datos devueltos son una matriz de objetos, por lo que el uso del gancho useSelector() con state.brand.list funciona bien.

    Sin embargo, cuando se utiliza findAndCountAll(), los datos devueltos son un objeto con dos propiedades – count y rows. La propiedad rows es una matriz de objetos, que es lo que necesitamos utilizar en nuestro código.

    Por lo tanto, para acceder a la propiedad rows, es necesario modificar el gancho useSelector() de la siguiente manera:

    const brandList = useSelector((state) => state.brand.list.rows);
    

    Esto dará acceso a la matriz de objetos, y podrás utilizar la función map() para iterar sobre la matriz y realizar las acciones requeridas.

    brandList.map((brand) => {
      // realizar acciones aquí
    });
    

Comments are closed.