Cyberbeveiligingsdilemma's: Datalekken
De prekerstdrukte is in volle gang. Op zoek naar cadeaus voor hun geliefden, zijn mensen steeds vaker bereid om online winkels te "bestormen".
Remix is een full-stack webframework gericht op webfundamentals en moderne UX.
Ja, dit is weer een JS framework, maar blijf nog even hangen want dit framework is gemaakt door Michael Jackson en Ryan Florence de slimme jongens achter React router. Ik hoop dat dit je aandacht heeft getrokken, dus laten we eens kijken wat er goed is aan de Remix kader.
Remix is een server-side framework gebouwd bovenop de Web API ophalen en React routerElke route in remix heeft drie primaire exports a voorlader
een actie
en een standaard component
export. De voorlader
functie wordt aangeroepen op de server vóór het renderen om gegevens aan de route te leveren, de actie
functie verantwoordelijk is voor de gegevensmutatie, is de standaardexport de component die zal worden weergegeven op die route. De voorlader
en actie
functies worden alleen aan de serverkant uitgevoerd en moeten een Reactie object, de standaard
export wordt zowel op de server als op de client uitgevoerd.
Een nieuwe Remix initialiseren project:
npx maak-remix@laatste
BELANGRIJK: Kies "Alleen de basis" en dan "Remix App Server" wanneer daarom wordt gevraagd.
cd [hoe je het project ook genoemd hebt]
npm run dev
```
Openen http://localhost:3000. de maak-remix
commando krijg je een startsjabloon met de volgende structuur:
app
map bevat al je applicatieroutes en code.app/entry.client.jsx
is het eerste stukje code dat in de browser wordt uitgevoerd en wordt gebruikt om hydrateren
de React componenten.app/entry.server.jsx
is het eerste stuk code dat wordt uitgevoerd wanneer een verzoek de server bereikt, dit bestand rendert onze React app naar een string/stream en stuurt dat als ons antwoord naar de client.app/root.jsx
is waar de hoofdcomponent naartoe gaat.app/routes/
is waar al je routemodules naartoe gaan, remix gebruikt een bestandssysteemgebaseerde routing.openbaar
map is waar je statische onderdelen (afbeeldingen/fonts/etc) in komen.remix.config.js
is waar de remixconfiguratie kan worden ingesteld.Laten we een login.jsx
routevoorbeeld in een 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>
);
}
```
Het eerste wat hier gebeurt is de voorlader
functie die controleert of de gebruiker al is ingelogd met de isLoggedIn
functie en zal doorsturen
hem naar de /dashboard
route, zo niet dan zal het gewoon een {succes: true }
antwoord, dan wordt de aanmeldpagina weergegeven.
De Aanmeldingsroute
rendert een formulier met een e-mail en wachtwoordinvoer en een verzendknop, zoals je kunt zien zijn er geen staat
variabelen noch een Verzenden
event handler in onze component, komt dat omdat in remix elke route een actie
en wanneer een formulier wordt verzonden met een POST
methode wordt de actie aangeroepen en wordt die gebeurtenis afgehandeld.
Wanneer het formulier wordt verzonden, wordt de actie
functie krijgt de
FormData van de Aanvraag object const formData = await request.formData()
dan construeren we de waarden
object met een e-mail en wachtwoordeigenschappen, de formulierData.get('e-mail')
zoekt naar het eerste overeenkomende veld in ons formulier met een name="e-mail".
eigenschap en de waarde ervan retourneren. We controleren of de referenties correct zijn met de verifyLogin
functie, hier zou je een van je favoriete JS schema validatiebibliotheken kunnen gebruiken en een ophalen
naar je aangepaste backend om te controleren of de inloggegevens correct zijn. Als dat zo is, kunnen we doorsturen
de gebruiker naar de /dashboard
route, anders retourneren we een json
antwoord met het foutenobject en een HTTP-statuscode 400
de useActionData
hook retourneert dit foutenobject als er fouten zijn en we geven de foutmelding voorwaardelijk weer zoals in {actionData?.errors?.email && <div>{actionData.errors.email}</div>}
.
De gebruikOvergang
hook vertelt ons alles over de overgangstoestand van de pagina, met de isSubmitting
variabele controleren we wanneer een indiening plaatsvindt, als er een is zullen we uitschakelen
de verzendknop en toon Inloggen....
in plaats van Inloggen
We kunnen de gebruiker ook een laadspinner of een andere indicatie laten zien.
De json
functie is gewoon een snelkoppeling voor het maken van toepassing/json
antwoordobjecten. De useLoaderData
hook retourneert de JSON-geparseerde gegevens van je route voorlader
de useActionData
geeft de route actie
geparseerde gegevens.
Elke route kan ook een meta
functie die verantwoordelijk is voor het instellen van metatags voor je html-document, op deze manier kun je een titel
en een beschrijving
voor elke route en voeg Open Graph of andere metatags toe.
export const meta = () => {
const title = 'Mijn geweldige pagina';
const description = 'Super awesome pagina';
return {
karakterset: 'utf-8',
titel,
beschrijving,
trefwoorden: 'Remix,Awesome',
twitter:image": "https://awesome-page.com/awesome.png",
twitter:card": "summarylargeimage",
twitter:creator": "@awesome",
twitter:site": "@awesome",
twitter:title": titel,
twitter:description": description,
};
};
exportstandaardfunctie AwesomeRoute() {
teruggeven
Geweldige route
;
}
```
We hebben slechts het topje van de ijsberg over Remix behandeld, er is nog zoveel meer te weten, hier zijn enkele nuttige links:
Het mooie van Remix is dat als je er beter mee wordt, je ook beter wordt in webfundamentals, zoals je hebt gezien wijzen veel van de links in dit artikel naar de Mozilla-documentenDit is wat wordt bedoeld met Remix is gericht op webfundamentals het gebruikt Web API's zoals het Response en Request object om de gebruikers te voorzien van een geweldige UX plus je kunt nog steeds al je React gebruikelijke technieken en favoriete bibliotheken gebruiken.
We hebben het in dit artikel niet gehad over alle geweldige functies van Remix, zoals Geneste routes, Foutgrenzen, Remix Stapels maar toch zou dit artikel je een goed idee moeten geven over de filosofie achter Remix.