Mudanças entre as edições de "React.js: Menus e alternando conteúdos"
De Aulas
(Criou página com 'Afluentes: Desenvolvimento Front-end II == Estilo == Primeiro vamos adicionar alguns estilos ao nosso arquivo App.js:') |
(→Estilo) |
||
(Uma revisão intermediária pelo mesmo usuário não está sendo mostrada) | |||
Linha 1: | Linha 1: | ||
+ | |||
+ | |||
Afluentes: [[Desenvolvimento Front-end II]] | Afluentes: [[Desenvolvimento Front-end II]] | ||
== Estilo == | == Estilo == | ||
− | Primeiro vamos adicionar alguns estilos ao nosso arquivo App.js: | + | Primeiro vamos adicionar alguns estilos ao nosso arquivo <code>App.css</code>:<syntaxhighlight lang="css"> |
+ | /* Estilos da Navbar */ | ||
+ | .navbar { | ||
+ | background-color: #333; | ||
+ | padding: 10px; | ||
+ | } | ||
+ | |||
+ | .navList { | ||
+ | display: flex; | ||
+ | list-style: none; | ||
+ | margin: 0; | ||
+ | padding: 0; | ||
+ | } | ||
+ | |||
+ | .navItem { | ||
+ | margin: 0 15px; | ||
+ | cursor: pointer; | ||
+ | color: #fff; | ||
+ | } | ||
+ | |||
+ | .navItem:hover { | ||
+ | text-decoration: underline; | ||
+ | } | ||
+ | |||
+ | /* Estilos do conteúdo */ | ||
+ | .content { | ||
+ | margin-top: 20px; | ||
+ | } | ||
+ | |||
+ | /* Estilos para o rodapé */ | ||
+ | .footer { | ||
+ | background-color: #333; | ||
+ | color: rgba(255, 255, 255, 0.6); /* Deixa as letras mais apagadas */ | ||
+ | text-align: center; | ||
+ | padding: 10px; | ||
+ | position: relative; | ||
+ | bottom: 0; | ||
+ | width: 100%; | ||
+ | margin-top: 20px; | ||
+ | font-size: 14px; /* Tamanho de fonte menor para dar aspecto mais discreto */ | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Conteúdo da Página Inicial == | ||
+ | Agora vamos criar um arquivo JavaScript para o conteúdo da página inicial. Então, dentro de <code>src</code> crie o arquivo <code>Home.js</code> com o seguinte conteúdo:<syntaxhighlight lang="javascript"> | ||
+ | import React, { Component } from 'react'; | ||
+ | |||
+ | class Home extends Component { | ||
+ | render() { | ||
+ | return ( | ||
+ | <div> | ||
+ | <h1>Bem-vindo à Página Inicial!</h1> | ||
+ | <p>Este é o conteúdo da página Home.</p> | ||
+ | </div> | ||
+ | ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | export default Home; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Conteúdo da Página Sobre == | ||
+ | E teremos também o <code>About.js</code>:<syntaxhighlight lang="javascript"> | ||
+ | import React, { Component } from 'react'; | ||
+ | |||
+ | class About extends Component { | ||
+ | render() { | ||
+ | return ( | ||
+ | <div> | ||
+ | <h1>Sobre nós</h1> | ||
+ | <p>Este é o conteúdo da página About.</p> | ||
+ | </div> | ||
+ | ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | export default About; | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | == App.js == | ||
+ | Por fim, temos o código do nosso <code>App.js</code> alterado para gerenciar o <code>Navbar</code> (menu) e os conteúdos:<syntaxhighlight lang="javascript"> | ||
+ | import React, { Component } from 'react'; | ||
+ | import './App.css'; // Importando o CSS externo | ||
+ | import Home from './Home'; | ||
+ | import About from './About'; | ||
+ | |||
+ | class App extends Component { | ||
+ | constructor(props) { | ||
+ | super(props); | ||
+ | this.state = { | ||
+ | content: 'Home', | ||
+ | }; | ||
+ | } | ||
+ | |||
+ | /* Tratamento do clique do menu para alterar o conteúdo da página. | ||
+ | Isso deve ser gerenciado por meio de um state. | ||
+ | */ | ||
+ | handleMenuClick = (page) => { | ||
+ | this.setState({ content: page }); | ||
+ | }; | ||
+ | |||
+ | /* Renderizador da Navbar com os ítens do menu. Veja que ao clicar, | ||
+ | chamamos a função de tratamento do click do menu. | ||
+ | */ | ||
+ | renderNavbar() { | ||
+ | return ( | ||
+ | <nav className="navbar"> | ||
+ | <ul className="navList"> | ||
+ | <li className="navItem" onClick={() => this.handleMenuClick('Home')}> | ||
+ | Início | ||
+ | </li> | ||
+ | <li className="navItem" onClick={() => this.handleMenuClick('About')}> | ||
+ | Sobre | ||
+ | </li> | ||
+ | </ul> | ||
+ | </nav> | ||
+ | ); | ||
+ | } | ||
+ | |||
+ | /* Renderizamos o conteúdo por meio de um condicional if. Pegamos do state | ||
+ | qual o ítem que foi clicado e então chamamos a classe específica. | ||
+ | */ | ||
+ | renderContent() { | ||
+ | const { content } = this.state; | ||
+ | if (content === 'Home') { | ||
+ | return <Home />; | ||
+ | } else if (content === 'About') { | ||
+ | return <About />; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /* Função de renderização da aplicação */ | ||
+ | render() { | ||
+ | return ( | ||
+ | <div className="App"> | ||
+ | {/* Navbar */} | ||
+ | {this.renderNavbar()} | ||
+ | |||
+ | {/* Conteúdo dinâmico */} | ||
+ | <div className="content"> | ||
+ | {this.renderContent()} | ||
+ | </div> | ||
+ | |||
+ | {/* Rodapé */} | ||
+ | <footer className="footer"> | ||
+ | <p>© 2024 MeuSite. Todos os direitos reservados.</p> | ||
+ | </footer> | ||
+ | </div> | ||
+ | ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | export default App; | ||
+ | |||
+ | </syntaxhighlight> |
Edição atual tal como às 19h20min de 26 de setembro de 2024
Afluentes: Desenvolvimento Front-end II
Estilo
Primeiro vamos adicionar alguns estilos ao nosso arquivo App.css
:
/* Estilos da Navbar */
.navbar {
background-color: #333;
padding: 10px;
}
.navList {
display: flex;
list-style: none;
margin: 0;
padding: 0;
}
.navItem {
margin: 0 15px;
cursor: pointer;
color: #fff;
}
.navItem:hover {
text-decoration: underline;
}
/* Estilos do conteúdo */
.content {
margin-top: 20px;
}
/* Estilos para o rodapé */
.footer {
background-color: #333;
color: rgba(255, 255, 255, 0.6); /* Deixa as letras mais apagadas */
text-align: center;
padding: 10px;
position: relative;
bottom: 0;
width: 100%;
margin-top: 20px;
font-size: 14px; /* Tamanho de fonte menor para dar aspecto mais discreto */
}
Conteúdo da Página Inicial
Agora vamos criar um arquivo JavaScript para o conteúdo da página inicial. Então, dentro de src
crie o arquivo Home.js
com o seguinte conteúdo:
import React, { Component } from 'react';
class Home extends Component {
render() {
return (
<div>
<h1>Bem-vindo à Página Inicial!</h1>
<p>Este é o conteúdo da página Home.</p>
</div>
);
}
}
export default Home;
Conteúdo da Página Sobre
E teremos também o About.js
:
import React, { Component } from 'react';
class About extends Component {
render() {
return (
<div>
<h1>Sobre nós</h1>
<p>Este é o conteúdo da página About.</p>
</div>
);
}
}
export default About;
App.js
Por fim, temos o código do nosso App.js
alterado para gerenciar o Navbar
(menu) e os conteúdos:
import React, { Component } from 'react';
import './App.css'; // Importando o CSS externo
import Home from './Home';
import About from './About';
class App extends Component {
constructor(props) {
super(props);
this.state = {
content: 'Home',
};
}
/* Tratamento do clique do menu para alterar o conteúdo da página.
Isso deve ser gerenciado por meio de um state.
*/
handleMenuClick = (page) => {
this.setState({ content: page });
};
/* Renderizador da Navbar com os ítens do menu. Veja que ao clicar,
chamamos a função de tratamento do click do menu.
*/
renderNavbar() {
return (
<nav className="navbar">
<ul className="navList">
<li className="navItem" onClick={() => this.handleMenuClick('Home')}>
Início
</li>
<li className="navItem" onClick={() => this.handleMenuClick('About')}>
Sobre
</li>
</ul>
</nav>
);
}
/* Renderizamos o conteúdo por meio de um condicional if. Pegamos do state
qual o ítem que foi clicado e então chamamos a classe específica.
*/
renderContent() {
const { content } = this.state;
if (content === 'Home') {
return <Home />;
} else if (content === 'About') {
return <About />;
}
}
/* Função de renderização da aplicação */
render() {
return (
<div className="App">
{/* Navbar */}
{this.renderNavbar()}
{/* Conteúdo dinâmico */}
<div className="content">
{this.renderContent()}
</div>
{/* Rodapé */}
<footer className="footer">
<p>© 2024 MeuSite. Todos os direitos reservados.</p>
</footer>
</div>
);
}
}
export default App;