Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] Canot read properties of undefined (reading 'length')

Opa, boa noite! Desde a tarde de hoje que estou procurando o que está casando este erro. Quando eu adiciono o operador ternário ou um if simples para a validação do Time vazio, acontece este erro e a tela não é renderizada.

Imagem do painel do desenvolvedor no chrome com o erro citadoNo console diz que ele não consegue ler a propriedade length deste código:

import React from 'react'
import Colaborador from '../Colaborador'
import './Time.css'

const Time = (props) => {

    return (
        (props.colaboradores.length) ?
            <section className='time' style={{ backgroundColor: props.corSecundaria }}>
                <h3 style={{ borderColor: props.corPrimaria }}>{props.nome}</h3>
                <div className='colaboradores'>
                    {props.colaborador.map(colaborador => <Colaborador nome={colaborador.nome} imagem={colaborador.imagem} cargo={colaborador.cargo} />)}
                </div>
            </section>
            : ' '
    )
}

export default Time

Notei que ele tenta pegar o colaboradores através das props, mas o mesmo não é passado lá no app.js:

import { useState } from 'react';
import Banner from './components/Banner';
import { Cabecalho } from './components/Cabecalho';
import { Formulario } from './components/Formulario';
import Time from './components/Time';

function App() {

  const times = [
    ...
  ]

  const [colaboradores, setColoaboradores] = useState([])
  const addNovoColaborador = (colaborador) => {
    console.log(colaborador);
    setColoaboradores([...colaboradores, colaborador]) //Pega a lista de todos os Colab, adiciona o novo e devolve um novo array
  }

  return (
    <div className="App">
      <Cabecalho />
      <Banner />
      <Formulario
        aoColaboradorCadastrado={colaborador => addNovoColaborador(colaborador)} //Recebe os dados de "dentro da tag" e joga para consumo da função
        times={times.map(time => time.nome)}
      />
      {times.map(time => <Time
        key={time.nome}
        nome={time.nome}
        corPrimaria={time.corPrimaria}
        corSecundaria={time.corSecundaria}
        colaborador={colaboradores.filter(colaborador => colaborador.time === time.nome)} />)}

    </div>
  );
}

export default App;

Quando tento passar a mesma pelas props, o filtro não funciona Estou deixando passar algo? Obrigadão!!

1 resposta
solução!

Como suspeitei, era erro de escrita mesmo kkkk

Quando chamava o componente, passava na prop colaborador o novo array criado pelo map, mas dentro do componente eu verificava o tamanho deste array pela prop colaboradores que em momento algum eu havia passado no componente. kkkkkk

Só alterei a verificação do length para o prop colaborador e deu certo. Vlw!!