1
resposta

Problemas com renderização do Header e Footer e imagens estáticas

Professor, boa tarde! Tudo certo?

Estou fazendo um projeto pessoal, como base neste curso, somente para fins de prática e não cair no esquecimento...

Para contextualizar, estou fazendo um site fake para o meu time do coração (Internacional). Criei um página de plantel, onde constam todos os jogadores, e estou fazendo um link para quando acionado, ser direcionado para uma página específica de cada jogador, mais ou menos como o projeto Aluroni, quando clicamos em um prato somos direcionados para a página específica do mesmo.

Porém, quando tento adicionar uma rota de "plantel/:n" estou sendo direcionado para a página certinha... porém, não carrega a imagem do jogador - a qual está dentro da pasta 'public'. E, ao dar um refresh na página, todas as outras imagens que foram adicionadas nos componentes header e footer também estão sumindo.

Vou deixar o meu código abaixo para ver se alguém consegue encontrar um erro...

arquivo de rotas:

function App() {
  return (
    <main>
      <Router>
        <Routes>
          <Route path='/' element={<Default />}>
            <Route path='sobre' element={<Club />} />
            <Route path='trofeus' element={<Honours />} />
            <Route path='plantel' element={<Team />} />
            <Route path='plantel/:n' element={<Player />} />
            <Route path='login' element={<Login />} />
            <Route path='*' element={<NotFound />} />
          </Route>
        </Routes>
      </Router>
    </main>
  );

Arquivo onde possui o link que leva até '/plantel/:n' :

const PlayerCard = (props: IPlayer): ReactElement => {

  const { nickname, imagePath, number, position } = props;

  return (
    <div className={ styles.cardContainer } >
      <img src={imagePath} alt={`Foto do jogador ${nickname}`} />
      <div className={styles.playerInfo}>
        <strong>{ nickname }</strong>
        <span>{ position }</span>
      </div>
      <div className={styles.playerNumber}>
        { number }
      </div>
      <div className={styles.playerLink}>
        <Link to={`${number}`}>
          { <ImForward /> **React-Icons }
        </Link>
      </div>
    </div>
  );
};

export default PlayerCard;

Página Player :

const Player = (): ReactElement => {

  const players = [...playerList];
  const { n } = useParams();
  const navigate = useNavigate();

  const player = players.find(item => item.number === Number(n));

  if (!player) {
    return <NotFound />
  }

  const next = players.find(item => item.id === player?.id + 1);
  const back = players.find(item => item.id === player?.id - 1);

  console.log(next, back);

  const { age, birthday, goals, name, nickname, nationality, number, position, imgPath } = player;

  return (
    <>
      <section className={styles.container}>
        <figure className={styles.container__image}>
          <img src={imgPath} alt={`Foto do jogador ${nickname}`} />
          <div>
            {number}
          </div>
        </figure>
        <div className={styles.info}>
          <div className={styles.info__header}>
            <span>{position}</span>
            <h2>{nickname}</h2>
            <span>{name}</span>
          </div>
          <div className={styles.info__description}>
            <Info attribute={"DATA DE NASCIMENTO"} value={birthday}/>
            <Info attribute={"NACIONALIDADE"} value={nationality}/>
            <Info attribute={"IDADE"} value={String(age)}/>
            {goals > 0 && <Info attribute={'GOLS MARCADOS'} value={String(goals)} />}
          </div>
        </div>
      </section>
      <div className={styles.buttonContainer}>
        { player.id !== 1 && <button type='button' onClick={() => navigate(`/plantel/${back?.number}`)}><BsArrowLeftShort /> {back?.name}</button>}
        { player.id !== players.length &&  <button type='button'  onClick={() => navigate(`/plantel/${next?.number}`)}><BsArrowRightShort />{next?.name}</button>}
      </div>
    </>
  );
};

export default Player;

Imagens estão todas em "public/assets/players".

1 resposta

Olá Pedro, tudo bem?

Desculpe a demora em retornar.

Parabéns pela iniciativa de criar um projeto pessoal para praticar seus conhecimentos em React.

Pelo que entendi, você está tendo problemas com a renderização das imagens dos jogadores e das imagens dos componentes header e footer após adicionar a rota "plantel/:n".

Pelo código que você compartilhou, parece que o problema pode estar no caminho das imagens. Você mencionou que as imagens estão dentro da pasta "public/assets/players", mas no componente PlayerCard, você está passando o caminho da imagem como "imagePath". Tente passar o caminho completo da imagem, incluindo a pasta "public", como por exemplo:

<img src={`/assets/players/${imagePath}`} alt={`Foto do jogador ${nickname}`} />

Além disso, no componente Player, você está importando a lista de jogadores como "playerList", mas não está utilizando essa variável em lugar nenhum. Certifique-se de que a lista de jogadores que você está utilizando no componente Player é a mesma que você está importando.

Por fim, verifique se as imagens dos componentes header e footer também estão com o caminho correto.

Espero ter ajudado.

Um abraço e bons estudos.