Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

Iterando sobre Array de Objetos

Tudo bem, pessoal?

Estou tentando criar um Nav bar em cima de um Array (para fins de estudo), mas estou me enrolando. Poderiam me apontar em um caminho? Estou separando os componentes da seguinte forma:

Meu HeaderNav contém o array e monta a "ul"

import React, { Component } from "react";
import HeaderSearchBox from "../headerSearchBox/headerSearchBox.jsx";
import NavItems from "./navItems";

let navItemsArray = [
  {
    item: "Histórico",
    link: "#",
  },
  {
    item: "Preferências",
    link: "#",
  },
  {
    item: "Indique",
    link: "#",
  },
  {
    item: "Sobre",
    link: "#",
  },
];

class HeaderNav extends Component {
  state = {};
  render() {
    return (
      <nav>
        <ul>
          {navItemsArray.map((navItem) => {
            return <NavItems />;
          })}
          <li className="header__nav___list-items">
            <HeaderSearchBox />
          </li>
        </ul>
      </nav>
    );
  }
}

export default HeaderNav;

Ele recebe a classe NavItems que vai construir as "li"s dentro da "ul" do HeaderNav:

import React, { Component } from "react";

class NavItems extends Component {
  state = {};
  render() {
    return (
      <li>
        <a href={navItem.link???}>
          {navItem.item???}
        </a>
      </li>
    );
  }
}

export default NavItems;

Minha confusão está em enviar os dados do Array p/ o filho e acessar as propriedades nele.

Agradeço desde já!

1 resposta
solução!

Solucionado com:

import React, { Component } from "react";
import NavItems from "./navItems";
import "./style.css";

class HeaderNav extends Component {
  constructor() {
    super();
    this.state = {
      navItems: [],
    };
  }

  componentWillMount() {
    this.setState({
      navItems: [
        {
          item: "Home",
          link: "#",
        },
        {
          item: "Histórico",
          link: "#",
        },
        {
          item: "Preferências",
          link: "#",
        },
        {
          item: "Indique",
          link: "#",
        },
        {
          item: "Sobre",
          link: "#",
        },
      ],
    });
  }
  state = {};
  render() {
    return (
      <nav>
        <NavItems navItems={this.state.navItems} />
      </nav>
    );
  }
}

export default HeaderNav;
import React, { Component } from "react";
import HeaderSearchBox from "./headerSearchBox/headerSearchBox.jsx";

class NavItems extends Component {
  state = {};
  render() {
    return (
      <ul className="header__nav">
        {this.props.navItems.map((navItems, key) => (
          <li className="header__nav___list-items">
            <a key={key} href={navItems.link}>
              {navItems.item}
            </a>
          </li>
        ))}
        <li className="header__nav___list-items">
          <HeaderSearchBox />
        </li>
      </ul>
    );
  }
}

export default NavItems;