리액션 - 보래 추정?

43543 단어

👋 머리말


Sevoc沥jáesteve em algum projeto webcom certeza játrabalhou com CSS ou algum dos seus préprocessadors(Sass, LESS, 터치펜).
다른 반응이 없다.실용적인 기술로서 우리는 간단한 구성 요소를 통해 실현할 수 있다.
와모스 평가사 oHeader da nossa aplicaço, 그는 이것이 아주 좋은 방법이라고 말했다. 이것은 Pouco nosso arquivo를 수정할 수 있다.Precisamos criar uma passar com nome Header,assim como o arquivo Header.tsx.E. 스파게티의 공급량은 index.tsx개, 수량은 Header.tsx개다.스파게티의 주성분은 styles.css종이다.
Por fim apagamos o Header.tsx.
/* components/Header/styles.css */

#header {
  background: #5636d3;
}
// components/Header/index.tsx

import "./styles.css"

function Header() {
  return (
    <div>
      <header id="header">
        <span>gofinances</span>
        <nav>
          <a href="/">Listagem</a>
          <a href="/create">Cadastro</a>
        </nav>
      </header>
    </div>
  );
}

export default Header
seu seuservidor ainda estiver rodando(동남, npm start)는 http://localhost:3000으로 주요 업무는nosso회사에 자금 지원을 제공하는 것이다.간단하게 말하면 반응이 없다.
공예가로서 Googleéseu melhor amigo입니다. 그는 공예사입니다. 그는 공예사로 새로운 공예를 개발하는 엔지니어입니다. 중요한 공예 절차도 없고 부품의 반응과 기능도 없습니다.
이것은 매우 복잡한 문제다.

⁉️ 무슨 문제예요?


아르고 무이토 봄(jáalgo muito bom)의 구성 부분으로 아르쿠보 니코(arquivo 분쿠니코)가 작성한 평가 보고서라고 이 보고서는 전했다.
  • 더블 스파게티 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료 조미료
  • 수입부품 번호 App.tsx e adicione-o abaixo <Header />.
  • 은 ARquivo styles.css의 새 부품을 교체하지 않으며, background은 새 부품을 교체할 필요가 없습니다.
  • 이것은'vocèacompanhouosèltimos'라는 회사가 발표한 최신 소식이다.
    rodando의nosso 프로젝트에 들어가지 않았고 브라우저도 없으니 좋은 선택입니다.당신은 이것이 중요한 구성 부분이라고 생각합니까?
    평가사: seletor CSS e o React importa os dois arquivos dentroda página, assim o CSS queé carregado por multimoéo sobrevere o outro.서로 다른 리그에서 우리는 서로 다른 팀을 선택할 수 있고, 서로 다른 리그에서 우리는 서로 다른 팀을 선택할 수 있다.
    문제를 해결하는 과정에서 우리는 어떤 항목도 없는 상황에서 전 호위원의 이름을 명명하는 새로운 방법이 필요하다.
    E. Styled Components호 공용사업빌딩 근처에 있습니다.

    📐 추정 성분


    O 스타일 구성 요소 fazé: ele cria uma classe com identificator 분짜 para cada component e Estilizado que criamos.Assim ele garante(Assim ele garante)는 새로운 평가 회사로, 이 회사는 응용 프로그램을 개발하는 회사다. 엘 나다(ele nada maisédo que um criador de CSS escrito em Javascript).
    바스타세에서 사람들은 간단한 음식, 음식과 음식을 통해 음식의 구성 부분을 다시 이용할 수 있다.마스 와모스 파제와 스프레메로.
    Vamos instalar o pacote no nosso 프로젝트:
    npm i styled-components
    
    이것은 매우 좋은 타자 원고인데, 그것은 불안정한 Também 글씨체이다.O #header은 디자인 환경의 환경에 서비스를 제공하고 실용적인 글씨체를 제공합니다.
    npm i @types/styled-components -D
    
    :pin:Se vocêestiver utilizando VSCode,existe uma extensão que nos ajudaráao trabalhar com o styled components queéessa.na documentação háferramentas para outros editores de texto.
    Agora, vamos alterar o arquivo -D 섹션 styles.css e alterar seu conte 톺do 섹션:
    // components/Header/styles.ts
    
    import styled from 'styled-components'
    
    export const Container = styled.div`
      background: #5636d3;
    `
    
    친구가 누구라고요?
  • styles.ts년에 우리의 수출액은 지속적으로 증가할 것이다. 이것은 우리의 미래 발전 방향이 될 것이다.
  • export const Containeréo nome que damos para a lib,poderia ser styled se quisermos,mas vamos seguir como mostra a documentaço.
  • batata indica qual seráo Returno desse componente,podendo ser qualquer tag do HTML5.
  • O conteúdo dentro das crassãO CSS em si,que seráaplicdo a essa .div utilizando uma classeúnica.
  • ⚠️ Caso essa sintaxe pareça differente para vocètem um artigo bem legal da Alura que explica como functiona as taged Template Literals.div호 결의:
    // components/Header/index.tsx
    
    import { Container } from "./styles";
    
    function Header() {
      return (
        <Container>
          <header>
            <span>gofinances</span>
            <nav>
              <a href="/">Listagem</a>
              <a href="/create">Cadastro</a>
            </nav>
          </header>
        </Container>
      );
    }
    
    export default Header
    
    비모스 쿠오 Header/index.tsx은 품질이 합격한 수출 회사로 이 회사에 대해 줄곧 평가를 하고 있다.
    아그라 테모스 마네라스 데프로세켈 정당:
  • Podemos criar vários Components estilizados dentro de um Components como o Header.예를 들어, além do Container, outros como 내비게이션, 제목 e는 cada um estilizando uma parte do nosso 구성 요소를 연결합니다.
  • Ou podemos utilizar o encademento das tags e ir estilizando tudo pelo component container.예를 들어 그는 Container년에 글을 발표했다.
  • // components/Header/styles.ts
    
    import styled from 'styled-components'
    
    export const Container = styled.div`
      background: #5636d3;
    
      span {
        color: #FFF
      }
    `
    
    Vamos seguir o segundo modelo,por praticidade.

    ♻️ Resetando os estilos globalmente


    많은 탭은 HTML로 표시되어 있는데, 왜냐하면 HTML로 표시되기 때문이다.Podemos ver isso nosso 항목 없음:

    태그 <span> tem uma'margin'para todos os lados de 8px.E. 파스타 추정치는 body 덴트로도 styles이다.Dentro dessa 파스타, vamos criar um arquivo src para nossa estiliza o 글로벌.
    //styles/global.ts
    
    import { createGlobalStyle } from 'styled-components'
    
    export default createGlobalStyle`
      * {
        margin: 0;
        padding: 0;
        outline: 0;
        box-sizing: border-box;
      }
    
      body {
        background: #F0F2F5 ;
        -webkit-font-smoothing: antialiased
      }
    
      body, input, button {
        font: 16px "Poppins", sans-serif;
      }
    
      button {
        cursor: pointer;
      }
    `
    
    설명:
  • Primeiro importamos de dentro do‘styled components’uma funço que cria um estilizaço global(createGlobalStyle);e assim como fazíamos com uma global.ts,escrevemos nosso código CSS entre crasses.
  • 에는 CSSS가 없고 estamos zerando todos os espaइamentos, mudando a cor de fundo padr'mudando a fonte da aplicaço a fontos, mudando a a cor cor de fundo a aplicaço.Vale Restable a import – a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
  • Por fim,mudamos o cursor padrão de um botão para a mãozinha do click👆.
  • 양귀비꽃 수입은 노스소 프로젝트가 없고 용도는 Google Fonts이다.이것은 디지털화를 실현하는 데 도움을 줄 수 있는 아주 좋은 해결 방안이다.
    <!-- public/index.html -->
    
    <!DOCTYPE html>
    <html lang="pt_BR">
      <head>
        <meta charset="utf-8" />
        <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <meta name="theme-color" content="#000000" />
        <link rel="preconnect" href="https://fonts.gstatic.com">
        <link href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap" rel="stylesheet">  
        <title>Go Finances</title>
      </head>
      <body>
        <div id="root"></div>
      </body>
    </html>
    
    수입 상품 시장: div호, styles/global.ts호 상품 제공 필요 없습니다.
    이와 관련해 협조자는 주로 와모스 파사르 파사르(Frend vamos passar parte do nosso código que estáno) App.tsx명이다.

    Mas porque temos que criar mais um componente? Não basta deixar tudo dentro do 'App'?


    만약 당신이 우리의 제품을 재조합하고 싶다면, 우리는 App.tsx년에 제품을 새로운 제품으로 재조합해야 한다.나의 생활은 매우 간단하다.
    Basta lembrar, sempre que criamos um Component que teráestiliza ço criamos uma 파스타 회사 이름은 dentro criamos um arquivo GlobalStyle e outro index.tsx e
    Criando uma 파스타 styles.ts dentro de pages, Criando um 성분 src 계속:
    //pages/Home/index.tsx
    
    import Header from "../../components/Header";
    import TransactionList from "../../components/TransactionList";
    
    function Home() {
      return (
        <>
          <Header />
          <TransactionList />
        </>
      );
    }
    
    export default Home;
    
    E Home:
    import Home from "./pages/Home";
    import GlobalStyle from "./styles/global";
    
    function App() {
      return (
        <>
          <GlobalStyle />
          <Home />
        </>
      );
    }
    
    export default App;
    

    💄 Deixando essa página um pouco mais bonita


    Estilizaçoéalgo queémuito difçcil de aprender em 자습서.Éalgo que se aprende tanto fazer e copiar grandes designs.이 사이트의 개발자는 pelo menos um pouco sobre Flexbox e/ou Grid Layout입니다. 이 사이트는 버스 회사입니다. 그들의 레이아웃 모델은 숫자에서 유럽까지입니다. 당신은 현지 관광지에서 반응할 수 있습니다.
    지역사회 사회봉사부 직원 중 아바나도 지역사회의 공공사업과 실천부서에는 Media Queries명의 책임자가 있는데 그들의 직원은 모두 지역사회 사회봉사자이다.
    카소노 퀘라 토도 코디고 다키 프라 프렌트(todo o código daqui pra frente)는 최고경영자입니다. 그는 전문가입니다.
    git clone -b entrypoint https://github.com/brunolipe-a/go-finances.git
    
    이것은 수정해야 할 숫자다.
    A estilizaão do Header fica assim:
    //components/Header/styles.ts
    
    import styled from 'styled-components'
    
    export const Container = styled.div`
      background: #5636d3;
      padding: 30px 0;
    
      header {
        width: 1120px;
        margin: 0 auto;
        padding: 0 20px 150px;
        display: flex;
        align-items: center;
        justify-content: space-between;
        color: #fff;
    
        span {
          font-size: 1.75rem;
          font-weight: medium;
        }
    
        nav {
          a {
            color: #fff;
            text-decoration: none;
            font-size: 16px;
            transition: opacity 0.2s;
            padding-bottom: 6px;
            border-bottom: 2px solid #FF872C;
    
            & + a {
              margin-left: 32px;
              margin-right: 5px;
            }
    
            &:hover {
              opacity: 0.6;
            }
          }
        }
      }
    `
    
    클리임 아쿠보엠 App.tsx:
    const formatValue = (value: number): string =>
      Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(
        value,
      );
    
    export default formatValue;
    
    Novo componente 카드:
    //components/Cards/styles.ts
    
    import styled from 'styled-components';
    
    interface CardProps {
      total?: boolean;
    }
    
    export const CardContainer = styled.section`
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      grid-gap: 32px;
      margin-top: -150px;
    `;
    
    export const Card = styled.div`
      background: ${({ total }: CardProps): string => (total ? '#FF872C' : '#fff')};
      padding: 22px 32px;
      border-radius: 5px;
      color: ${({ total }: CardProps): string => (total ? '#fff' : '#363F5F')};
    
      header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        font-weight: 500;
        a {
          background: #7159c1;
        }
        p {
          font-size: 16px;
        }
      }
      h1 {
        margin-top: 14px;
        font-size: 36px;
        font-weight: 500;
        line-height: 54px;
      }
    `;
    
    //components/Cards/index.tsx
    
    import formatValue from "../../utils/formatValue";
    import { CardContainer, Card } from "./styles";
    
    export interface Balance {
      income: number;
      outcome: number;
      total: number;
    }
    
    type CardsProps = {
      balance: Balance;
    };
    
    function Cards({ balance }: CardsProps) {
      return (
        <CardContainer>
          <Card>
            <header>
              <p>Entradas</p>
            </header>
            <h1>{formatValue(balance.income)}</h1>
          </Card>
          <Card>
            <header>
              <p>Saídas</p>
            </header>
            <h1>{formatValue(balance.outcome)}</h1>
          </Card>
          <Card total>
            <header>
              <p>Total</p>
            </header>
            <h1>{formatValue(balance.total)}</h1>
          </Card>
        </CardContainer>
      );
    }
    
    export default Cards;
    
    Temos que remover o antigo componente Transaction List e criar Novatement e uma 파스타:
    // components/TransactionList/styles.ts
    
    import styled from 'styled-components';
    
    export const TableContainer = styled.section`
      margin-top: 64px;
      table {
        width: 100%;
        border-spacing: 0 8px;
        th {
          color: #969cb3;
          font-weight: normal;
          padding: 20px 32px;
          text-align: left;
          font-size: 16px;
          line-height: 24px;
        }
        td {
          padding: 20px 32px;
          border: 0;
          background: #fff;
          font-size: 16px;
          font-weight: normal;
          color: #969cb3;
          &.title {
            color: #363f5f;
          }
          &.income {
            color: #12a454;
          }
          &.outcome {
            color: #e83f5b;
          }
        }
        td:first-child {
          border-radius: 8px 0 0 8px;
        }
        td:last-child {
          border-radius: 0 8px 8px 0;
        }
      }
    `;
    
    // components/TransactionList/index.tsx
    
    import formatValue from "../../utils/formatValue";
    
    import { TableContainer } from "./styles";
    
    export interface Transaction {
      id: string;
      title: string;
      value: number;
      type: "income" | "outcome";
      category: { title: string };
      created_at: string;
    }
    
    type TransactionListProps = {
      transactions: Transaction[];
    };
    
    function TransactionList({ transactions }: TransactionListProps) {
      return (
        <TableContainer>
          <table>
            <thead>
              <tr>
                <th>Título</th>
                <th>Preço</th>
                <th>Categoria</th>
                <th>Data</th>
              </tr>
            </thead>
    
            <tbody>
              {transactions.map((transaction) => (
                  <tr key={transaction.id}>
                    <td className="title">{transaction.title}</td>
                    <td className={transaction.type}>
                      {formatValue(transaction.value)}
                    </td>
                    <td>{transaction.category?.title}</td>
                    <td>
                      {new Date(transaction.created_at).toLocaleDateString("pt-br")}
                    </td>
                  </tr>
                ))}
            </tbody>
          </table>
        </TableContainer>
      );
    }
    
    export default TransactionList;
    
    E번호 src/utils/formatValue.ts:
    // pages/Home/styles.ts
    
    import styled from 'styled-components';
    
    export const Container = styled.div`
      width: 100%;
      max-width: 1120px;
      margin: 0 auto;
      padding: 40px 20px;
    `;
    
    // pages/Home/index.tsx
    
    import { useState } from "react";
    
    import Header from "../../components/Header";
    
    import Cards, { Balance } from "../../components/Cards";
    import TransactionList, { Transaction } from "../../components/TransactionList";
    
    import { Container } from "./styles";
    
    function Home() {
      const [balance, setBalance] = useState<Balance>({
        income: 12.12,
        outcome: 6,
        total: 6.12,
      });
    
      const [transactions, setTransactions] = useState<Transaction[]>([
        {
          id: "1",
          category: { title: "Trabalho" },
          title: "Venda",
          type: "income",
          value: 12.12,
          created_at: "2021-02-03T00:00:00",
        },
        {
          id: "2",
          category: { title: "Comida" },
          title: "Lanche",
          type: "outcome",
          value: 6,
          created_at: "2021-02-21T00:00:00",
        },
      ]);
    
      return (
        <>
          <Header />
          <Container>
            <Cards balance={balance} />
            <TransactionList transactions={transactions} />
          </Container>
        </>
      );
    }
    
    export default Home;
    
    Na Home temos algo novo:src/pages/Home.
    실용성 useState<Transaction[]><>단은 정보원으로 용감한 전사나 군사 장교에 해당한다.아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다 아유다
    예를 들어 세르바 살바 우마 현악 시리즈: useState.용기가 넘치는 나라입니다. 그 발전 방향은.

    😄 가다랑어?


    Aqui terminamos a estilizaão da tela de listagem.이것은 숫자로 하나의 공통된 구성 부분이다.
    와모스 사태 이후의 공공시설과 소비자의 수요 때문에 영향을 받는 사람은 없다.
    특히 agradecimento💜 오페소 알다 Rocketseat🚀 pelo conteúdo de qualidade em React.

    좋은 웹페이지 즐겨찾기