Remix::CRUD com Supabase - Parte 04 - Carregando e inserindo novos registros
arquivo app/index.tsx 편집
가장 중요한 순간에 확인되는 가장 강력한 연결 장치는 Supase está funcionando e para isto editaremos o arquivo
routes/index.tsx
응답으로 로타index
da nossa aplicação입니다.1) Importe
LoaderFunction
euseLoaderData
do Remiximport { LoaderFunction, useLoaderData } from 'remix'
O que é o método
loader: LoaderFunction
?O
loader
는 서버측 실행 기능을 실행하지 않으며 Remix para obter dados externos, portanto a usaremos para obter os registros que virão do banco de dados.케오훅
useLoaderData
?O
useLoaderData
é um hook provido pelo próprio Remix para que se possa ter acesso ao que é exportado pelo loader
2) Supabase의 클라이언트에서 가져오기
import { supabase } from '~/utils/supabase-client.server'
3) Crie o tipo
PostsModel
, que além de tipar as nossas variáveis, vai nos ajudar muito no intelisense do VSCode.type PostsModel = {
post_id: number
post_uuid: string
post_author: string
post_title: string
post_text: string
post_situation: string
post_created_at: string
}
4) Agora, iremos dar um
select
no Supabase para carregar as informações dos registros no loader
:export const loader: LoaderFunction = async () => {
const { data: posts } = await supabase
.from<PostsModel>('posts')
.select('*')
.order('post_id', { ascending: false })
return posts
}
5) Deixe o componente
Index
desta 형식:export default function Index() {
const posts = useLoaderData<PostsModel[]>()
return (
<div style={{ fontFamily: 'system-ui, sans-serif', lineHeight: '1.4' }}>
<h1>Blog Remix com Supabase</h1>
<p>
<a href='/insert'>Inserir</a>
</p>
<ul style={{ listStyle: 'none' }}>
{posts?.map(post => (
<li key={post.post_uuid}>
<h3>{post.post_title}</h3>
<small>{post.post_author}</small>
<blockquote>{post.post_text}</blockquote>
</li>
))}
</ul>
</div>
)
}
Para ver se tudo deu certo, rode o comando
npm run dev
e você perceberá que irá aparecer apenas o título Blog Remix com Supabase
, pois não há nenhum registro inserido na base de dados.Repare que foi criado um link
insert
logo abaixo do títuloBlog Remix com Supabase
, se clicarmos nele agora seremos direcionados para uma página que não existe ainda e, inevitavelmente, receberemos um erro404
, mas isto será resolvido nos próximos passos.
Criando a Rota temporária 인서트
Para testar e ver se a nossa comunicação com Supabase está realmente funcionando e se nosso
loader
está trazendo as informações dos registros, faremos antes um insert
para escrever alguns registros no Supabase, que poderão ser apagados posteriormente, então, mãos a .Aditivo: Nesta parte muito código será duplicado, mas não se preocupe, por enquanto faremos funcionar pra depois deixar mais limpo.
1) Crie dentro da 파스타
routes
um arquivo com o nomeinsert.tsx
e faça os mesmos imports que fizemos emindex
, ou seja:import { LoaderFunction, useLoaderData } from 'remix'
import { supabase } from '~/utils/supabase-client.server'
2) Da mesma forma que na
index
, crie o type PostsModel
:type PostsModel = {
post_id: number
post_uuid: string
post_author: string
post_title: string
post_text: string
post_situation: string
post_created_at: string
}
3) Chame o método
loader
, mas agora dando um insert
no Supabase:export const loader: LoaderFunction = async () => {
const { data } = await supabase.from('posts').insert([
{
post_author: 'Junior Martins',
post_title: 'O título da sua aplicação',
post_text: 'Uma coisa é certa: ninguém sai vivo dessa vida.. Por que "tudo junto" se escreve separado e "separado" se escreve tudo junto?. Se tamanho fosse documento o elefante era dono do circo.. Não concordo nem discordo, muito pelo contrário. Em rio de piranhas, jacaré nada de costas. Um é pouco, dois é bom e três é ímpar. Um é pouco, dois é bom e três é ímpar. O sonho não acabou. E ainda temos pão doce, maria-mole e queijadinha. Uma coisa é uma coisa, outra coisa é outra coisa.',
},
])
return data?.[0]
}
Aditivo: Você pode alterar o valor de
post_author
,post_title
epost_text
dentro do métodoloader
para diferenciar os registros.
4) 크리오컴포넌트
Insert
:export default function Insert() {
const post = useLoaderData<PostsModel>()
return (
<>
<h1>Novo registro inserido</h1>
<div style={{ fontFamily: 'system-ui, sans-serif', lineHeight: '1.4' }}>
<h3>{post.post_title}</h3>
<p>
<small>{post.post_author}</small>
</p>
<blockquote>{post.post_text}</blockquote>
</div>
</>
)
}
Para finalizar, inicie sua aplicação e clique no link
inserir
você irá visualizar uma mensagem informando que um novo registro foi inserido e logo abaixo os dados que foram inseridos. Clique agora emHome
e irá ver que o nosso novo post foi listado, faça este processo algumas vezes pra ver que realmente um novo registro está sendo inserido.Parte 05, iremos melhorar o código e criar um formulário para fazer esta inserção com dados que a gente definir. 테 베조 라! 😉
Reference
이 문제에 관하여(Remix::CRUD com Supabase - Parte 04 - Carregando e inserindo novos registros), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/juniormartinxo/remix-crud-com-supabase-parte-04-carregando-e-inserindo-novos-registros-2nic텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)