Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida para renderização diferente

Estou com duvida, pois não sei como faço pra renderizar no meu. Eu codei diferente desde o inicio e não queria mudar, aprendi assim já... :(

Bem, basicamente a diferença, é que o instrutor, roda diretamente o time lá no arquivo do JS do App.js, com o método de map, eu não fiz isso, já que criei um componente de "main" apenas para o time e os colaboradores.

No meu código, não estranhe, eu tentei codar com outros nomes, mas o equivalente é... Time = Group, Colaborador = Dev;

Help me, vou mandar o link do meu github, a ultima versão de commit ta com o erro que estou agora, me ajudem.

Codigo Github!

2 respostas
solução!

Fala João, tudo bem?

Com base no código que você compartilhou vou comentar aqui o que observei que você pode tentar como solução para esse problema.

Vi que você criou um componente <Main /> para lidar com a renderização dos times e dos colaboradores.

<div className="App">
      <Header />
      <Form
        times={times.map((time) => time.name)}
        signInColaborator={(colaborator) => newColaborator(colaborator)}
      />
      <Main />
    </div>

E neste componente você está recebendo como props e tentando acessar os colaboradores através de props.colaborators.

export function Main(props) {
// ...
}
{props.colaborators.map((colaborator) => (
  <Dev
    name={colaborator.name}
    office={colaborator.office}
    desc={colaborator.desc}
    image={colaborator.image}
  ></Dev>
))}

O problema aqui é que você não passou essa prop para o componente <Main />, então o React não entende essa declaração.

Outro ponto de melhoria está nos componentes <Main /> e <App/>, ambos possuem o array times como um código que se repete. Não é uma boa prática repetir códigos. Uma sugestão é permanecer com o array times no componente <App/> e passá-lo como também como uma prop ao componente <Main />.

Gostei que você percebeu que tanto o time como os colaboradores poderiam ser componentes separados e criou componentes para lidar com a responsabilidade de renderizar o que fosse preciso. Isso tá muito alinhado a um dos princípios de SOLID e boas práticas de escrita de código. Parabéns!

Espero ter ajudado! Grande abraço.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado. ✓

Sim, entendi, otima ideia passar o time como props diretamente ao main... Fiz desta forma: Esta correto?


// Componente de main:

const [colaborators, setColaborators] = useState([]);

  const newColaborator = (colaborator) => {
    console.log(colaborator);
    setColaborators([...colaborators, colaborator]);
  };

  return (
    <main>
      <Title>Minha Organização: </Title>
      {props.times.map((time) => (
        <Group
          key={time.name}
          name={time.name}
          primaryColor={time.primaryColor}
          secondColor={time.secondColor}
        >
          {props.colaborators.map((colaborator) => (
            <Dev
              name={colaborator.name}
              office={colaborator.office}
              desc={colaborator.desc}
              image={colaborator.image}
            ></Dev>
          ))}
        </Group>
      ))}
    </main>
  );

Mas mesmo assim aparece com erro, e aparece com erro no método map em:

// Uncaught TypeError: Cannot read properties of undefined (reading 'map')
{props.times.map((time) => {...

E tamém não entendi como posso renderizar o componente, fiz de forma diferente já que separei o Main, de App, e o insrtrutor renderiza em somente um componente. Como posso fazer isso renderizar em Main, e funcionar em App, não consegui traduzir totalmente o meu raciocínio de independência de componentes para renderizar corretamente ainda KKKKKKKKKKKKKKK. Help!