Dilemmaer knyttet til cybersikkerhet: Datalekkasjer
Førjulsrushet er i full gang. På jakt etter gaver til sine kjære er folk stadig mer villige til å "storme" nettbutikkene
Remix er et fullstack webrammeverk med fokus på grunnleggende webfunksjoner og moderne UX.
Ja, dette er enda en JS rammeverk, men bare hold deg litt lenger ettersom dette rammeverket er laget av Michael Jackson og Ryan Florence de smarte gutta bak React Ruter. Håper det fikk oppmerksomheten din, så la oss se hva som er bra med Rammeverk for remiksering.
Remix er et serverside-rammeverk bygget på toppen av Web Fetch API og React Ruterhar hver rute i remix tre primære eksportvarer a laster
, en handling
og en standard komponent
eksport. De laster
funksjonen vil bli kalt på serveren før rendering for å levere data til ruten, vil handling
er ansvarlig for datamutasjon, er standard eksport den komponenten som vil bli gjengitt på den ruten. Den laster
og handling
funksjoner kjøres kun på serversiden og må returnere en Svar objektet standard
eksport kjøres både på server- og klientsiden.
Slik initialiserer du en ny Remix prosjekt:
npx create-remix@latest
VIKTIG: Velg "Just the basics", og deretter "Remix App Server" når du blir bedt om det
cd [hva enn du har kalt prosjektet]
npm run dev
```
Åpne opp http://localhost:3000. den opprette-remiks
kommandoen får du en startmal med følgende struktur:
app
mappen vil inneholde alle applikasjonsrutene dine og kode.app/entry.client.jsx
er den første koden som kjøres i nettleseren og brukes til å hydrat
React-komponentene.app/entry.server.jsx
er den første koden som kjøres når en forespørsel kommer til serveren. Denne filen gjør om React-appen vår til en streng/strøm og sender den som svar til klienten.app/root.jsx
er hvor rotkomponenten skal plasseres.app/ruter/
er der alle rutemodulene dine skal gå, bruker remix en filsystembasert ruting.offentlig
mappen er der de statiske ressursene dine plasseres (bilder/skrifttyper/etc.).remix.config.js
er der remix-konfigurasjonen kan stilles inn.La oss sjekke en login.jsx
ruteeksempel inne i en Remix-app:
import { redirect, json, Form, useActionData, useTransition } from 'remix';
import { isLoggedIn, verifyLogin } from '../auth';
export const loader = async ({ request }) => {
if (await isLoggedIn(request)) {
return redirect('/dashboard');
}
return json({ success: true });
};
export const action = async ({ request }) => {
const formData = await request.formData();
const values = {
email: formData.get('email') ?? '',
password: formData.get('password') ?? '',
};
const errors = await verifyLogin(values);
if (errors) {
return json({ errors }, { status: 400 });
}
return redirect('/dashboard');
};
export default function LoginRoute() {
const actionData = useActionData();
const transition = useTransition();
const isSubmitting = transition.state === 'submitting';
return (
Email
{actionData?.errors?.email &&
{actionData.errors.email}
}
<div>
<label htmlFor="password">Password</label>
<input id="password" name="password" type="password" />
{actionData?.errors?.password && (
<div>{actionData.errors.password}</div>
)}
</div>
<div>
<button type="submit" disabled={isSubmitting}>
{`Login ${isSubmitting ? '...' : ''}`}
</button>
</div>
</Form>
);
}
```
Det første som skjer her er laster
funksjon som sjekker om brukeren allerede er logget inn med isLoggedIn
funksjon og vil omdirigere
ham til /dashboard
rute, hvis ikke vil den ganske enkelt returnere en { suksess: true }
svar, blir påloggingssiden gjengitt.
Den LoginRoute
gjengir et skjema med e-post og passord og en innsendingsknapp, og som du kan se, er det ingen stat
variabler eller en onSubmit
hendelsesbehandler i komponenten vår, er det fordi hver rute i remix kan eksportere en handling
og når et skjema sendes inn med en POST
metoden vil handlingen bli kalt og vil håndtere den hendelsen.
Når skjemaet blir sendt inn, vil handling
funksjonen vil få
FormData fra Forespørsel objekt const formData = await request.formData()
, så konstruerer vi verdier
objektet med en e-postadresse og passord, kan formData.get('e-post')
vil se etter det første matchende feltet i skjemaet vårt med en name="e-post"
egenskapen og returnerer verdien. Vi kontrollerer om legitimasjonen er riktig med verifyLogin
funksjon, her kan du bruke et hvilket som helst av dine favorittbibliotek for JS-skjemavalidering og gjøre en hente
til din egendefinerte backend for å sjekke om innloggingsdataene er riktige, hvis så er tilfelle omdirigere
brukeren til /dashboard
rute, ellers returnerer vi en json
svar med feilobjektet og en HTTP-statuskode 400
, den useActionData
kroken vil returnere dette feilobjektet hvis det finnes noen, og vi gjengir feilmeldingen som i {actionData?.errors?.email && <div>{actionData.errors.email}</div>}
.
Den useTransition
kroken forteller oss alt om sidens overgangstilstand, med isSubmitting
variabelen sjekker vi når en innsending skjer, hvis det er noen, vil vi deaktivere
send-knappen og vise Innlogging....
i stedet for Logg inn
kan vi også vise brukeren en lastespinner eller en annen indikasjon i stedet.
Den json
funksjon er bare en snarvei for å opprette application/json
svarobjekter. De useLoaderData
kroken returnerer JSON-parsede data fra ruten din laster
, den useActionData
returnerer ruten handling
analyserte data.
Hver rute kan også eksportere en meta
funksjon som er ansvarlig for å angi metakoder for Html-dokumentet ditt, på denne måten kan du angi en tittel
og en beskrivelse
for hver rute og legge til Open Graph eller andre metatagger du ønsker.
export const meta = () => {
const title = 'Min fantastiske side';
const description = "Superkjempeflott side";
return {
charset: 'utf-8',
title,
description,
keywords: 'Remix,Awesome',
'twitter:image': 'https://awesome-page.com/awesome.png',
'twitter:card': 'summarylargeimage',
'twitter:creator': '@awesome',
'twitter:site': '@awesome',
'twitter:title': tittel,
'twitter:description': description,
};
};
export default function AwesomeRoute() {
return
Awesome Route
;
}
```
Vi har bare tatt for oss toppen av isfjellet om Remix, det er så mye mer å vite, her er noen nyttige lenker:
Det som er bra med Remix er at ved å bli bedre med det, blir du bedre på grunnleggende webkunnskaper, som du har sett, peker mange av lenkene i denne artikkelen til Mozilla-dokumenterDet er dette som menes med at Remix er fokusert på grunnleggende webkunnskap. Det bruker web-API-er som Response- og Request-objektet for å gi brukerne en flott brukeropplevelse, og du kan fortsatt bruke alle dine React vanlige teknikker og favorittbiblioteker.
Vi har ikke snakket om alle de flotte funksjonene som Remix tilbyr i denne artikkelen, for eksempel Nestede ruter, Feilgrenser, Remix Stacks men denne artikkelen bør likevel gi deg en god idé om filosofien bak Remix.