recoil NPM (Wie es für Entwickler funktioniert)
Zustandsverwaltung ist ein kritischer Aspekt beim Aufbau robuster und skalierbarer React-Anwendungen. Unter den verschiedenen Zustandsverwaltung-Bibliotheken hat sich Recoil als eine leistungsstarke und flexible Option herauskristallisiert. Von Facebook als experimentelles Zustandsverwaltung-Framework entwickelt, vereinfacht Recoil komplexe Szenarien der Zustandsverwaltung und bietet eine intuitivere API zur Verwaltung globaler Zustände in React-Anwendungen.
Dieser Artikel untersucht die Kernkonzepte von Recoil, seine Vorteile und wie man damit in einem React-Projekt beginnt. Außerdem werden wir uns die IronPDF Node.js PDF Generation Tools Bibliothek ansehen, um PDFs von Website-URLs oder HTML zu generieren.
Was ist das Recoil-Paket?
Recoil ist eine Zustandsverwaltung-Bibliothek für React, die darauf abzielt, die Einschränkungen bestehender Lösungen wie Redux und Context API zu adressieren. Es bietet einen einfacheren und leistungsfähigeren Weg, um geteilten Zustand in React-Anwendungen zu verwalten, und bietet Funktionen wie feingranulare Aktualisierungen, asynchrone Zustandsverwaltung und einfache Integration in den Concurrent Mode von React.
Kernkonzepte
Recoil führt mehrere Schlüsselkonzepte ein, die es von anderen Zustandsverwaltung-Bibliotheken unterscheiden:
- Atome: Atome sind die fundamentalen Zustandseinheiten in Recoil. Sie repräsentieren Zustandsteile, die über Komponenten hinweg geteilt werden können. Wenn sich der Wert eines Atoms ändert, wird jede Komponente, die auf dieses Atom abonniert ist, automatisch neu gerendert.
- Selektoren: Selektoren sind reine Funktionen, die einen Zustand von einem oder mehreren Atomen oder anderen Selektoren ableiten. Sie können synchron oder asynchron sein und ermöglichen komplexe Zustandsableitungen und Datenabfragelogik.
- RecoilRoot: Diese Komponente dient dazu, dem Komponentenbaum den Recoil-Kontext bereitzustellen. Es ist ähnlich dem Context-Provider von React und muss den Anwendungsteil umschließen, der den Recoil-Zustand verwendet.
Vorteile von Recoil
Recoil bietet mehrere Vorteile gegenüber anderen Zustandsverwaltungslösungen:
- Feingranulare Aktualisierungen: Im Gegensatz zu Redux, wo jede Zustandsänderung ein erneutes Rendern in mehreren Komponenten auslösen kann, stellt Recoil sicher, dass nur die Komponenten, die den geänderten Zustand abonniert haben, neu gerendert werden, was zu einer besseren Performance führt.
- Kompatibilität mit dem Concurrent Mode: Recoil ist so konzipiert, dass es nahtlos mit dem Concurrent Mode von React zusammenarbeitet und so ein reibungsloseres Benutzererlebnis mit Funktionen wie Time Slicing und Suspense ermöglicht.
- Einfacher asynchroner Zustand: Der Umgang mit asynchronen Zuständen, wie z. B. dem Abrufen von Daten, ist in Recoil dank der integrierten Unterstützung für asynchrone Selektoren einfacher.
- Skalierbarkeit: Recoil skaliert dank seines modularen Zustandsverwaltungsansatzes gut für große Anwendungen.
- Gemeinschaftsprojekt: Unter einer MIT-Lizenz ist Recoil frei verwendbar, modifizierbar und verteilbar. Dies fördert eine weit verbreitete Anwendung und Zusammenarbeit unter Entwicklern, ermöglicht jedem freien Aufbau, Fehlerbehebungen beizutragen und Modifikationen zum Zwecke der Verbesserung von Recoil zu teilen. Diese Entwicklung von Recoil erfolgt in ihrem Open-Source-GitHub-Repository.
Erste Schritte mit Recoil
Um Recoil in einer React-Anwendung zu verwenden, befolgen Sie diese Schritte:
npm Install Recoil
Um die neueste stabile Version zu installieren, führen Sie den folgenden Befehl aus, da das Recoil-Paket in npm lebt:
npm install recoil
npm install recoil
RecoilRoot einrichten
Umschließen Sie Ihre Anwendung mit der RecoilRoot-Komponente.
import React from 'react';
import ReactDOM from 'react-dom/client';
import { RecoilRoot } from 'recoil';
import App from './App';
const rootElement = document.getElementById('root');
const root = ReactDOM.createRoot(rootElement);
root.render(
<RecoilRoot>
<App />
</RecoilRoot>
);
import React from 'react';
import ReactDOM from 'react-dom/client';
import { RecoilRoot } from 'recoil';
import App from './App';
const rootElement = document.getElementById('root');
const root = ReactDOM.createRoot(rootElement);
root.render(
<RecoilRoot>
<App />
</RecoilRoot>
);
Atome und Selektoren definieren
import { atom, selector } from 'recoil';
// Atom to hold the text state
export const textState = atom({
key: 'textState',
default: '',
});
// Selector to derive the character count from the textState atom
export const charCountState = selector({
key: 'charCountState',
get: ({ get }) => {
const text = get(textState);
return text.length;
},
});
import { atom, selector } from 'recoil';
// Atom to hold the text state
export const textState = atom({
key: 'textState',
default: '',
});
// Selector to derive the character count from the textState atom
export const charCountState = selector({
key: 'charCountState',
get: ({ get }) => {
const text = get(textState);
return text.length;
},
});
Verwenden Sie Atome und Selektoren in Komponenten
import React from 'react';
import { useRecoilState, useRecoilValue } from 'recoil';
import { textState, charCountState } from './state';
function CharacterCounter() {
// Use Recoil hooks to manage atom and selector state
const [text, setText] = useRecoilState(textState);
const count = useRecoilValue(charCountState);
// Handle text change
const onChange = (event) => {
setText(event.target.value);
};
return (
<div>
<input type="text" value={text} onChange={onChange} />
<p>Character Count: {count}</p>
</div>
);
}
export default CharacterCounter;
import React from 'react';
import { useRecoilState, useRecoilValue } from 'recoil';
import { textState, charCountState } from './state';
function CharacterCounter() {
// Use Recoil hooks to manage atom and selector state
const [text, setText] = useRecoilState(textState);
const count = useRecoilValue(charCountState);
// Handle text change
const onChange = (event) => {
setText(event.target.value);
};
return (
<div>
<input type="text" value={text} onChange={onChange} />
<p>Character Count: {count}</p>
</div>
);
}
export default CharacterCounter;
Einführung in IronPDF

IronPDF ist eine beliebte PDF-Erzeugungsbibliothek, die zum Erstellen, Bearbeiten und Konvertieren von PDF-Dokumenten verwendet wird. Das IronPDF-npm-Paket ist speziell für Node.js-Anwendungen konzipiert. Hier sind einige wichtige Funktionen und Details über das IronPDF-npm-Paket:
Wichtige Merkmale
HTML zu PDF Konvertierung
Konvertieren Sie HTML-Inhalte mühelos in PDF-Dokumente. Dieses Feature ist besonders nützlich zur Erzeugung dynamischer PDFs aus Webinhalten.
URL-zu-PDF-Umwandlung
Erzeugen Sie PDFs direkt von URLs, sodass Sie die Inhalte von Webseiten erfassen und als PDF-Dateien programmatisch speichern können.
PDF-Manipulation
Verschmelzen, teilen und manipulieren Sie vorhandene PDF-Dokumente mit Leichtigkeit. IronPDF bietet Funktionen wie das Anhängen von Seiten, das Splitten von Dokumenten und mehr.
PDF-Sicherheit
Sichern Sie Ihre PDF-Dokumente, indem Sie sie mit Passwörtern verschlüsseln oder digitale Signaturen anwenden. IronPDF bietet Optionen zum Schutz Ihrer sensiblen Dokumente vor unberechtigtem Zugriff.
Hochwertige Ausgabe
Erzeugen Sie hochwertige PDF-Dokumente mit präziser Wiedergabe von Text, Bildern und Formatierungen. IronPDF stellt sicher, dass Ihre generierten PDFs die Originalinhalte getreu wiedergeben.
Plattformübergreifende Kompatibilität
IronPDF ist mit verschiedenen Plattformen kompatibel, einschließlich Windows, Linux und macOS, was es für eine Vielzahl von Entwicklungsumgebungen geeignet macht.
Einfache Integration
Integrieren Sie IronPDF mühelos in Ihre Node.js-Anwendungen mithilfe seines npm-Pakets. Die API ist gut dokumentiert, was es einfach macht, PDF-Erzeugungsfunktionen in Ihre Projekte einzubauen.
Installation
Um das IronPDF NPM-Paket zu installieren, verwenden Sie den folgenden Befehl:
yarn add @ironsoftware/ironpdf @ironsoftware/ironpdf-engine-windows-x64
yarn add @ironsoftware/ironpdf @ironsoftware/ironpdf-engine-windows-x64
PDFs generieren mit IronPDF und Recoil
Abhängigkeiten installieren: Erstellen Sie zunächst ein neues Next.js-Projekt (falls Sie dies noch nicht getan haben). Verweisen Sie auf dieses Next.js-Setup-Tutorial für detaillierte Anweisungen oder verwenden Sie den folgenden Befehl:
npx create-next-app@latest recoil-pdf --use-npm --example "https://github.com/vercel/next-learn/tree/main/basics/learn-starter"
npx create-next-app@latest recoil-pdf --use-npm --example "https://github.com/vercel/next-learn/tree/main/basics/learn-starter"
Navigieren Sie als Nächstes in Ihr Projektverzeichnis:
cd recoil-pdf
cd recoil-pdf
Installieren Sie die erforderlichen Pakete:
yarn add @ironsoftware/ironpdf @ironsoftware/ironpdf-engine-windows-x64
yarn add recoil
yarn add @ironsoftware/ironpdf @ironsoftware/ironpdf-engine-windows-x64
yarn add recoil
Fügen Sie die Datei 'app.js' hinzu, um Recoil wie unten einzubinden:
import React from 'react';
import { RecoilRoot } from 'recoil';
export default function App({ Component, pageProps }) {
return (
<RecoilRoot>
<Component {...pageProps} />
</RecoilRoot>
);
}
import React from 'react';
import { RecoilRoot } from 'recoil';
export default function App({ Component, pageProps }) {
return (
<RecoilRoot>
<Component {...pageProps} />
</RecoilRoot>
);
}
PDF-Generierungs-API: Der erste Schritt besteht darin, eine Backend-API zur Generierung des PDF-Dokuments zu erstellen. Da IronPDF nur serverseitig ausgeführt wird, müssen wir eine API erstellen, die aufgerufen wird, wenn Benutzer ein PDF generieren möchten. Erstellen Sie eine Datei im Pfad pages/api/pdf.js und fügen Sie den folgenden Codeinhalt hinzu:
// pages/api/pdf.js
import { IronPdfGlobalConfig, PdfDocument } from '@ironsoftware/ironpdf';
// Apply your IronPDF license key
IronPdfGlobalConfig.getConfig().licenseKey = "Your license key";
export default async function handler(req, res) {
try {
const url = req.query.url;
const pdf = await PdfDocument.fromUrl(url);
const data = await pdf.saveAsBuffer();
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=awesomeIron.pdf');
res.send(data);
} catch (error) {
console.error('Error generating PDF:', error);
res.status(500).end();
}
}
// pages/api/pdf.js
import { IronPdfGlobalConfig, PdfDocument } from '@ironsoftware/ironpdf';
// Apply your IronPDF license key
IronPdfGlobalConfig.getConfig().licenseKey = "Your license key";
export default async function handler(req, res) {
try {
const url = req.query.url;
const pdf = await PdfDocument.fromUrl(url);
const data = await pdf.saveAsBuffer();
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=awesomeIron.pdf');
res.send(data);
} catch (error) {
console.error('Error generating PDF:', error);
res.status(500).end();
}
}
IronPDF benötigt einen Lizenzschlüssel, den Sie von der IronPDF Trial License Page erhalten und in den obigen Code einfügen.
Fügen Sie den folgenden Code hinzu, um eine URL vom Benutzer zu akzeptieren, ein PDF aus der URL zu generieren und es in der Datei index.js zu speichern:
import Head from 'next/head';
import styles from '../styles/Home.module.css';
import React from 'react';
import { atom, useRecoilState } from 'recoil';
// Atom to store user input URL
const textState = atom({
key: 'textState', // unique ID (with respect to other atoms/selectors)
default: '', // default value (aka initial value)
});
export default function Home() {
const [text, setText] = useRecoilState(textState);
// Function to generate PDF from URL
const generatePdf = async () => {
try {
const response = await fetch('/api/pdf?url=' + text);
const blob = await response.blob();
const url = window.URL.createObjectURL(new Blob([blob]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'awesomeIron.pdf');
document.body.appendChild(link);
link.click();
link.parentNode.removeChild(link);
} catch (error) {
console.error('Error generating PDF:', error);
}
};
// Handle input change
const handleChange = (event) => {
setText(event.target.value);
};
return (
<div className={styles.container}>
<Head>
<title>Generate PDF Using IronPDF</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<main>
<h1>Demo Recoil NPM and Generate PDF Using IronPDF</h1>
<input type="text" value={text} onChange={handleChange} placeholder="Enter URL" />
<button style={{ margin: 20, padding: 5 }} onClick={generatePdf}>
Generate PDF
</button>
</main>
<style jsx>{`
main {
padding: 5rem 0;
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
footer {
width: 100%;
height: 100px;
border-top: 1px solid #eaeaea;
display: flex;
justify-content: center;
align-items: center;
}
footer img {
margin-left: 0.5rem;
}
footer a {
display: flex;
justify-content: center;
align-items: center;
text-decoration: none;
color: inherit;
}
code {
background: #fafafa;
border-radius: 5px;
padding: 0.75rem;
font-size: 1.1rem;
font-family: Menlo, Monaco, Lucida Console, Liberation Mono,
DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace;
}
`}</style>
<style jsx global>{`
html,
body {
padding: 0;
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto,
Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue,
sans-serif;
}
* {
box-sizing: border-box;
}
`}</style>
</div>
);
}
import Head from 'next/head';
import styles from '../styles/Home.module.css';
import React from 'react';
import { atom, useRecoilState } from 'recoil';
// Atom to store user input URL
const textState = atom({
key: 'textState', // unique ID (with respect to other atoms/selectors)
default: '', // default value (aka initial value)
});
export default function Home() {
const [text, setText] = useRecoilState(textState);
// Function to generate PDF from URL
const generatePdf = async () => {
try {
const response = await fetch('/api/pdf?url=' + text);
const blob = await response.blob();
const url = window.URL.createObjectURL(new Blob([blob]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'awesomeIron.pdf');
document.body.appendChild(link);
link.click();
link.parentNode.removeChild(link);
} catch (error) {
console.error('Error generating PDF:', error);
}
};
// Handle input change
const handleChange = (event) => {
setText(event.target.value);
};
return (
<div className={styles.container}>
<Head>
<title>Generate PDF Using IronPDF</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<main>
<h1>Demo Recoil NPM and Generate PDF Using IronPDF</h1>
<input type="text" value={text} onChange={handleChange} placeholder="Enter URL" />
<button style={{ margin: 20, padding: 5 }} onClick={generatePdf}>
Generate PDF
</button>
</main>
<style jsx>{`
main {
padding: 5rem 0;
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
footer {
width: 100%;
height: 100px;
border-top: 1px solid #eaeaea;
display: flex;
justify-content: center;
align-items: center;
}
footer img {
margin-left: 0.5rem;
}
footer a {
display: flex;
justify-content: center;
align-items: center;
text-decoration: none;
color: inherit;
}
code {
background: #fafafa;
border-radius: 5px;
padding: 0.75rem;
font-size: 1.1rem;
font-family: Menlo, Monaco, Lucida Console, Liberation Mono,
DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace;
}
`}</style>
<style jsx global>{`
html,
body {
padding: 0;
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto,
Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue,
sans-serif;
}
* {
box-sizing: border-box;
}
`}</style>
</div>
);
}
Code Erklärung
- Erstellen Sie einen Atomzustand mit
const textState = atom()von Recoil, der zum Speichern der vom Benutzer im Eingabefeld eingegebenen URL verwendet wird. - Fügen Sie die Komponenten Überschrift, Eingabe und Schaltfläche hinzu.
- Starten Sie die Anwendung mit
yarn devund geben Sie dann die URL der Website ein, die als PDF generiert werden soll. - Wenn die Schaltfläche 'PDF generieren' geklickt wird, wird das angeforderte PDF generiert. Wie unten dargestellt:
Ausgabe
Wie die Website aussieht:

Die PDF-Datei, die beim Aufruf der URL https://ironpdf.com/nodejs/ generiert wurde:

IronPDF-Lizenz

Die IronPDF Testlizenz ermöglicht Benutzern, seine umfangreichen Funktionen vor dem Kauf auszuprobieren. Weitere Details zur unbefristeten Lizenzierung finden Sie auf der IronPDF Lizenzinformationen-Seite.
Platzieren Sie hier den Lizenzschlüssel:
import { IronPdfGlobalConfig, PdfDocument } from '@ironsoftware/ironpdf';
// Apply your IronPDF license key
IronPdfGlobalConfig.getConfig().licenseKey = "Add Your key here";
import { IronPdfGlobalConfig, PdfDocument } from '@ironsoftware/ironpdf';
// Apply your IronPDF license key
IronPdfGlobalConfig.getConfig().licenseKey = "Add Your key here";
Abschluss
Recoil bietet einen modernen und effizienten Ansatz zur Zustandsverwaltung in React-Anwendungen. Seine feingranularen Updates, die Kompatibilität mit dem Concurrent Mode und die einfache Handhabung asynchroner Zustände machen es zu einer überzeugenden Wahl für Entwickler, die skalierbare und leistungsstarke React-Apps bauen möchten.
Durch die Nutzung von Atomen und Selektoren ermöglicht Recoil eine modulare und intuitive Art, den globalen Zustand zu verwalten, und verbessert das gesamte Entwicklungserlebnis. IronPDF Node.js Bibliothek NPM ist ein Unternehmenspaket mit PDF-Generierung und Lese-Funktionalitäten. Entwickler können diese Funktionalitäten einfach in ihre Apps integrieren, indem sie die IronPDF-Bibliothek verwenden.




