Criando UI no React na velocidade da luz! (shadcn/ui)

Rocketseat
26 Jan 202414:55

Summary

TLDRThe video demonstrates building a product listing page with React, TypeScript, and the ShadCN UI library. It starts by initializing a new project, installing dependencies like Twind and Lucid Icons, and importing ShadCN components. It then constructs a products table with mock data, a filter form, and add product modal dialog using ShadCN's ready-made accessible components. Customizations are made like adding icons, styling buttons, and positioning elements. Overall, it leverages ShadCN's pre-built components to quickly build a functional web interface with a clean, modern design.

Takeaways

  • 😀 Builds a React project with Typescript from scratch
  • 👨‍💻 Uses common libraries like React, Typescript, Vite, Tailwind
  • 📦 Installs and configures UI component library ShadCN
  • 🎨 Customizes ShadCN theme and styles
  • 🏗️ Structures app layout with Flexbox and Grid
  • 📋 Creates a products table with filtering
  • 👷‍♂️ Uses form to add modal dialog for new product
  • 🗃️ Saves new products to list with React state
  • ⛓️ Links form dialog open/close to button clicks
  • ✅ Creates complete CRUD app workflow for products

Q & A

  • What framework is being used to build the application?

    -The application is being built using React and TypeScript.

  • What UI library is used for styled components?

    -The ShadCN UI library is used which builds on top of Twind for styled components.

  • How are modal dialogs implemented?

    -The ShadCN dialog components are used to implement modal dialogs and popups.

  • How is form input handling implemented?

    -Form inputs use ShadCN input components to handle user input.

  • How are tables and tabular data displayed?

    -The ShadCN table components are used to display tabular and grid data.

  • How is conditional component rendering achieved?

    -React's conditional rendering capabilities are leveraged to show/hide components.

  • How are icons and vectors implemented in the UI?

    -The Lucid React icon library is used to render icons and vector graphics.

  • How is component state management handled?

    -React state and hooks are used for local component state management.

  • How are styles modularized?

    -Twind CSS is used in conjunction with CSS modules for component-scoped styles.

  • What build tools are used?

    -Vite is used as the build toolchain along with TypeScript compiler.

Outlines

00:00

😊 Setting up the React project with Typescript

The paragraph describes setting up a new React project with Typescript. It shows installing dependencies like Twind and ShadCN UI library, configuring ESLint, TypeScript, etc., and generating ShadCN components like Button, Table, Dialog. The goal is to build a products listing table and a form to add new products.

05:01

👨‍💻 Building the products listing table

The paragraph shows constructing a products listing table with columns like ID, Product, Price. It uses ShadCN's Table component and loops over mock data to generate rows. It also adds a header, buttons for New Product and Filter, and input fields to filter products by ID and name.

10:03

📝 Adding modal dialog to create new products

The paragraph demonstrates creating a modal dialog that opens on clicking New Product button. It uses ShadCN's Dialog component and shows the markup for header, content with a form, and footer with action buttons. The form inside allows entering details like product name and price to create a new record.

Mindmap

Keywords

💡React

React is a popular JavaScript library for building user interfaces. The script mentions using React along with TypeScript to create the project. React allows building reusable UI components to create complex interfaces.

💡TypeScript

TypeScript is a typed superset of JavaScript used here for additional type safety. It compiles to plain JavaScript. Using TypeScript allows catching errors during development.

💡twind

twind is a utility CSS framework that offers tools like flexbox and grid helpers. It is used here along with the Chakra UI components from shadcn.

💡shadcn

shadcn is a React UI component library that is used to build the application's interfaces with pre-built components like tables, buttons etc. It integrates well with twind for styling.

💡lucid

lucid is another React UI library that is used here specifically for its icons. Icons are embedded in the buttons to improve the visual appeal.

💡Modal

A modal is an overlay window used to display content on top of the main view. Here a dialog modal is implemented using the shadcn Dialog component to input form data.

💡Grid

Grid refers to CSS grid layout to align items in columns and rows. A 6 column grid is created here to layout the form fields using Grid components from shadcn.

💡Component

Components are reusable building blocks used to compose complex UI's. The application is built using components from external libraries like shadcn and lucid.

💡Props

Props allow passing data to React components. The array map method is used to iterate and generate multiple rows for the table by passing the index as a prop.

💡State

State allows components to manage data that can change over time. Form data would likely be managed in local state before submitting.

Highlights

Creating a new project named URL TR http with React and TypeScript.

Setting up the project environment in VS Code and installing dependencies.

Removing unnecessary files and configurations for a clean project setup.

Introduction to using Shadn library for easy component styling with Twind.

Configuring Twind for styled components and initiating Shadn UI setup.

Adjusting TS config and Vit config as per Shadn UI documentation for project compatibility.

Installing types for Node.js and customizing import paths.

Selecting component style preferences and setting up global CSS with Shadn UI.

Choosing a color theme for the application and integrating Shadn UI components.

Adding Shadn UI components to the project for a responsive and styled interface.

Implementing a simple UI interface with table and form elements using Shadn UI.

Customizing components directly in the codebase for visual adjustments.

Utilizing Lucid React for additional icons and enhancing button aesthetics.

Creating a modal for new product entry with dialog components from Shadn UI.

Finalizing the product list and new product form interface, incorporating feedback mechanisms for user interaction.

Transcripts

play00:02

vou criar aqui uma pastinha e vou criar

play00:05

um projeto

play00:09

Vit eu vou chamar ele de URL TR http

play00:13

state vou criar el com react

play00:17

typescript Vamos abrir ele aqui no vest

play00:21

code instalar as dependências E aí eu

play00:24

vou remover aqui readm aqui no index

play00:27

removo

play00:28

favicon vamos botar aqui no título URL

play00:32

htp

play00:35

state remover o SL

play00:40

lint remover aqui

play00:43

assets remover o CSS ah tirar as

play00:48

importações

play00:50

tirar tudo

play00:58

aqui

play01:07

beleza tá aqui nosso projeto E aí eu vou

play01:10

criar uma interface simples aqui usando

play01:14

shaden não sei se vocês já usaram mas eu

play01:16

adoro usar essa biblioteca PR facilidade

play01:18

ele é basicamente uma série de

play01:20

componentes prontos estilizados com

play01:21

twind mas o grande diferencial dessa

play01:23

biblioteca para outras como Bootstrap ou

play01:25

sei lá qualquer biblioteca que traga

play01:27

componentes prontos é que a gente não

play01:29

instala os Sim a gente copia os

play01:31

componentes pra nossa code base assim

play01:33

fica mais fácil a gente alterar esses

play01:34

componentes caso a gente precise

play01:35

alterá-los visualmente para funcionar no

play01:37

nosso app então aqui que que eu vou

play01:38

fazer ó vou começar instalando o twind

play01:41

po CSS Auto prefixer e rodando o comando

play01:43

de init do twind para ele criar um

play01:45

arquivo de configuração do twind então

play01:48

eu rodo esses dois comandos e pronto já

play01:51

criou aqui ó o twind config E aí a gente

play01:54

vai seguir basicamente o guia de

play01:55

instalação do do shats Nui Eu Vou Abrir

play01:58

Meu TS config p Jason como ele pede aqui

play02:01

e aqui dentro de compiler options eu vou

play02:04

jogar essa opção aqui que é basicamente

play02:06

para fazer um remap do path né fazer as

play02:08

importações começando com @ E aí eu vou

play02:11

instalar este pacote Opa pnpm

play02:15

install types node e vou alterar o meu

play02:19

arquivo do Vit config para Como está

play02:23

sendo pedido ali na documentação E aí eu

play02:26

vou rodar o comando init aqui do shad n

play02:31

que ele vai fazer algumas perguntas aqui

play02:32

para

play02:35

mim essas perguntas que são se eu tô

play02:38

usando typescript sim ah qual que é o

play02:40

default dos componentes o estilo dos

play02:42

componentes vou selecionar aqui o New

play02:43

York ele deixa os componentes um

play02:45

pouquinho menores Qual que é a

play02:46

tonalidade de Cinza que eu quero usar na

play02:48

minha aplicação tem várias são as

play02:49

tonalidades de Cinza do twind se você

play02:51

tiver dúvidas aqui é você você pode

play02:53

entrar

play02:55

Ah aqui no na documentação do twind

play02:58

dentro de Colors aqui ó ele tem

play03:00

tonalidad slate que é puxada pro Azul

play03:02

Grey é um pouquinho puxada para Azul Zin

play03:04

é totalmente Cinza o neutral vai puxando

play03:06

um pouquinho pro amarelo marrom e o

play03:08

Stone também eu vou usar

play03:10

aqui o slate mesmo aonde que eu vou

play03:13

colocar meu CSS Global eu vou botar ele

play03:15

dentro de sear bar

play03:18

global.css se eu quero usar variáveis

play03:20

CSS vou botar assim e se eu tô usando

play03:23

algum prefix no

play03:25

tnd não e onde que tá meu arquivo de

play03:29

furação do Tent que é exatamente essa

play03:31

localização meus componentes pode ser @

play03:34

components Lib utils se eu tô usando

play03:36

server components aqui não porque eu não

play03:37

tô usando next e Yes para ele escrever o

play03:40

arquivo e agora ele vai instalar algumas

play03:42

dependências E aí a gente vai começar

play03:44

instalando aqui alguns componentes do

play03:46

shad CN que a gente vai utilizar então

play03:49

eu quero criar basicamente uma tabela e

play03:51

um formulário pra gente inserir alguns

play03:53

Campos então eu vou rodar aqui o pnpm

play03:56

DLX shads add e eu vou instalar alguns

play03:59

componentes Então vamos lá eu vou

play04:01

instalar aqui dentro o Button E aí eu

play04:04

dou um espaço instalo outro eu vou botar

play04:09

o

play04:11

table O dialog que é o

play04:16

modal o input o

play04:21

Label

play04:26

pagination deixa eu ver o que mais Bot

play04:30

hum não

play04:33

botar text area não toast Não por

play04:36

enquanto tá bom botar só esses

play04:38

componentes aqui e aí como eu falei A

play04:40

grande diferença do shad CN é que se

play04:44

depois eu esqueci algum instalo aqui

play04:45

mais Ah é que diferente de outras

play04:48

bibliotecas de componentes ele não

play04:50

vai ele vai copiar o código dos

play04:53

componentes para dentro da nossa

play04:54

aplicação E aí a gente pode customizar

play04:55

esses componentes como a gente preferir

play04:57

então aqui dentro de components ó ui tá

play04:59

todo o código dos componentes aqui do

play05:01

chat senen botão dialog input Label por

play05:04

baixo dos panos né os componentes do

play05:06

chat senen Y eles usam o hadix ui não é

play05:10

melhor usar o sonor para toast na

play05:12

verdade tá aqui o shaden ui ele usa o

play05:14

sonor Né o o chat cny liberou uma

play05:17

integração com o sonor então ele usa

play05:20

também o sonor por baixo dos PS e aqui

play05:22

que que a gente vai fazer

play05:25

Ah eu vou agora no meu aqui

play05:31

importar o meu global.css E aí já posso

play05:34

ver que lá na minha aplicação ele vai

play05:36

resetar os estilos né E aí agora a gente

play05:38

vai criar uma uma interface aqui vamos

play05:42

lá no meu App agora que que eu vou fazer

play05:44

vou começar adicionando

play05:45

algumas estilizações

play05:50

aqui vou criar aqui uma

play05:58

div

play06:05

[Música]

play06:13

Vou importar o table que vem lá do meu

play06:14

do meu do shad E aí eu tenho table head

play06:19

ou melhor table header

play06:23

primeiro que seria o meu th head E aí eu

play06:26

tenho table head para cada coluna então

play06:28

criar aqui algumas colunas ID produto

play06:31

preço ah a gente já pode ver a nossa

play06:34

tabela ali em cima Ah vamos botar um

play06:36

rounded aqui para ficar arredondado

play06:39

Ah vamos criar aqui o table Body E aí eu

play06:43

tenho um table Row que é para cada linha

play06:46

da tabela E aí eu vou ter um table Cell

play06:49

para cada para cada coluna né então vou

play06:51

botar um ID aqui

play06:53

fictício um produto vou botar sei lá

play06:57

e produto 0 e um preço

play07:03

19200 sei lá qualquer coisa assim e

play07:06

agora a gente vai replicar esse table

play07:08

Row algumas vezes então eu vou usar aqui

play07:09

um Array from length botar aqui 10 map

play07:15

Opa escrevi length errado quem nunca

play07:18

né E aí eu pego o índice

play07:22

retorno e uso o índice aqui dentro na

play07:25

aqui pronto agora eu tenho isso

play07:27

replicado algumas vezes e posso usar o

play07:30

índice aqui dentro no nome do produto

play07:32

para também ter nome diferente pronto

play07:35

Nossa tabela já tá aqui dentro eu vou

play07:38

adicionar um pouquinho de padding aqui

play07:39

nessa div para não ficar tão colado e

play07:42

aumentar um pouquinho o arredondamento

play07:44

da borda perfeito

play07:46

Ah e

play07:48

agora que que a gente vai fazer aqui

play07:50

dentro eu vou adicionar

play07:53

uma

play07:54

sessão de criação de um novo um novo

play07:58

produto

play08:00

então eu vou

play08:02

é criar aqui em cima da nossa tabela vou

play08:06

criar uma div essa div aqui eu vou

play08:10

colocar nela um Class name

play08:14

e Flex

play08:17

items Center e

play08:20

justify between Ah para ela separar aqui

play08:24

eu vou ter um botão que eu vou importar

play08:25

lá do do shad cen Ah ele vai ser novo

play08:31

produto isso aqui na verdade tem que est

play08:33

fora

play08:34

aqui beleza agora

play08:38

sim vou dar aqui um Space y4 para

play08:41

separar um pouquinho e aí aqui agora

play08:44

além do novo produto eu vou ter um

play08:46

formulário para filtros Então vou criar

play08:48

aqui um

play08:49

form dentro desse form aqui eu vou usar

play08:51

o input que vem do sh eu vou deixar ele

play08:55

filtrar pelo id do pedido então filtro

play08:59

pelo id botar aqui um Place holder ID do

play09:03

pedido então já tá lá o nosso filtro

play09:06

aqui no for eu vou usar nele um Flex

play09:09

items Center com um GAP do para

play09:13

distanciar cada input aqui no input eu

play09:15

quero que el não que ele ocupe uma uma

play09:19

largura automática e não que ele ocupe a

play09:21

tela toda esse form aqui eu vou botar na

play09:24

verdade dentro dessa div aqui para ele

play09:26

ficar alinhado pra

play09:28

esquerda Ah beleza Já tá aqui ó agora eu

play09:31

vou colocar mais um input que é para eu

play09:33

filtrar pelo nome do produto e aqui vai

play09:36

ser a name Deixa eu ver se eu não

play09:38

preciso disso aqui agora eu acho que

play09:40

preciso não não preciso pronto e aí eu

play09:42

vou colocar aqui dentro um botão também

play09:45

Type submit filtrar resultados E aí o

play09:49

chat CN ele traz pros botões algumas

play09:51

variantes que é para eu escolher um

play09:52

formato diferente eu vou usar o tem o

play09:54

secondary aqui vou usar o outline ó que

play09:56

ele deixa não outline não ficou feio PR

play09:58

Caramba vou usar o o secondary mesmo que

play10:00

ele deixa o botão mais apagadinho assim

play10:02

mas daí parece que tá desabilitado né

play10:05

vou usar aqui o Ghost deixa eu ver Ghost

play10:07

não ficou feio PR caramba link pode ser

play10:10

o link E aí eu vou fazer o seguinte

play10:12

dentro desse botão aqui vou botar um

play10:14

Icone Zinho para ficar mais bonito Então

play10:16

vou instalar o lucid react E aí eu

play10:20

importo aqui do lucid react o botão o

play10:24

ícone de search ah e o ícone de Plus

play10:30

Plus Circle então eu vou jogar aqui

play10:33

nesse botão o o ícone search vou deixar

play10:37

aqui nele um W3 H3 MR2 para dar uma

play10:42

distanciada acho que ele ficou um pouco

play10:44

pequeno

play10:45

demais show agora a gente vai fazer a

play10:48

mesma coisa no novo

play10:50

produto porém usando o icon

play10:55

Plus que que eu fiz ah Plus C já tá lá

play11:00

show então a gente por último vai

play11:03

adicionar aqui em cima um

play11:05

H1 produtos para construir a experiência

play11:09

de uma tela n botar um text 4xl melhor

play11:12

3xl Font b e pronto temos Nossa lista de

play11:17

produtos e agora o que eu quero fazer eu

play11:20

quero clicar em novo produto e abrir um

play11:22

modal né E aí a gente pode usar o dialog

play11:24

que vende do do sh n então aqui por

play11:28

volta do novo produt

play11:29

eu vou colocar um

play11:32

dialog que vem do

play11:35

Chad fechar ele aqui embaixo por volta

play11:38

do botão eu preciso botar um

play11:41

dialog

play11:44

Trigger e nesse dialog Trigger Eu uso as

play11:48

child para que o botão que esteja dentro

play11:49

dele funcione como Trigger para abrir o

play11:51

modal E aí eu boto o dialog content para

play11:54

ser o conteúdo então se eu escrevo hello

play11:56

world aqui dentro quando eu clico em

play11:57

novo produto agora ele abre um modal

play12:00

escrito hello world E aí a gente vai

play12:03

nesse modal aqui usar o dialog header

play12:06

com um dialog title aqui dentro escrito

play12:09

novo produto a gente vai usar o dialog

play12:13

description criar um novo produto no

play12:16

sistema se lá qualquer coisa só para

play12:18

ficar um pouquinho mais bonito a gente

play12:20

vai ter o nosso o

play12:23

nosso conteúdo aqui

play12:27

dentro que eu vou botar dentro deixa eu

play12:30

ver aqui

play12:32

hã dentro de um form e no final eu vou

play12:36

ter ainda dentro desse form o meu dialog

play12:40

footer que é onde vão est os meus botões

play12:43

então eu vou ter um botão para salvar

play12:46

que o Type dele vai ser submit e eu vou

play12:49

ter um botão para cancelar onde o Type

play12:52

dele vai ser Button mesmo e eu vou botar

play12:54

uma variante nele Ah destructive então

play12:57

agora eu ah ficou meio feio isso aqui

play13:00

botar variante Ghost

play13:02

hum

play13:04

variante

play13:06

outline assim ficou show

play13:08

ó beleza e agora dentro do form eu vou

play13:12

criar os meus inputs então eu tenho o

play13:15

nome do produto e o preço basicamente eu

play13:17

vou criar uma div

play13:20

e e aqui no form eu vou dar um Class

play13:23

name Space Y 6 para separar os campos

play13:27

essa div aqui eu vou botar um Grid a

play13:30

Grid

play13:31

C fazer um Grid de seis colunas e aí eu

play13:36

vou usar a Label que importa do shad c

play13:40

produto input

play13:42

ã Grid col quro eu vou usar na verdade e

play13:46

aí no input eu boto a co Spa 3 para ele

play13:50

ocupar três colunas então vai ficar mais

play13:52

ou menos assim ó aqui no Grid eu preciso

play13:55

botar items Center para centralizar a

play13:58

Label e text right para botar a Label

play14:02

ali na direita e um GAP 2 para

play14:04

distanciar GAP 3 PR distanciar a Label

play14:06

do input E aí eu vou fazer isso HTML for

play14:12

name e aqui eu boto um ID name e replico

play14:16

esse campo aqui embaixo para o preço do

play14:19

produto

play14:20

ã Price Price Beleza a gente já tem uma

play14:25

interface aqui para cadastro de produto

play14:28

e listagem de produto eu preciso que o

play14:31

botão aqui de cancelar ele Feche o modal

play14:33

Então por volta dele aqui eu posso botar

play14:36

um dialog

play14:38

close e botar um as child também E aí

play14:42

basicamente quando eu clico agora ele

play14:43

fecha o modal automaticamente beleza

play14:46

Tudo

play14:53

pronto

Rate This

5.0 / 5 (0 votes)

Вам нужно реферат на русском языке?