Dans votre projet, créez un fichier .env
- et incluez ce fichier dans votre .gitignore! Ce fichier donnera à la configuration Webpack de Gatsby la valeur secrète. Cela gardera vos informations sensibles en sécurité et non stockées dans GitHub. YOUR_FAUNADB_SECRET = "valeur de la faune"
Nous pouvons ensuite nous diriger vers l'onglet "Sécurité" de notre base de données et créer une nouvelle clé. Comme il s'agit d'un secret protégé, il est sûr d'utiliser un rôle de «serveur». Lorsque vous enregistrez la clé, elle vous fournira votre secret. Assurez-vous de saisir cela maintenant, car vous ne pouvez pas l'obtenir à nouveau (sans recréer la clé).
Une fois la configuration établie, nous pouvons écrire une requête GraphQL dans nos composants pour récupérer les données à la construction
Obtention des données et création du modèle
Nous allons ajouter cette requête à notre composant Midsection pour la rendre accessible à nos deux composants.
const Midsection = () => {
const data = useStaticQuery (
graphql`
requête GetSignatures {
allSignatures {
nœuds {
Nom
message
_ts
_id
}
}
} `
);
// ... reste du composant
}
Ceci accède au type Signatures
que nous avons créé dans la configuration. Il saisira toutes les signatures et fournira un tableau de nœuds. Ces nœuds contiendront les données dont nous avons besoin: nom
message
ts
id
.
Nous allons définir ces données dans notre état - cela facilitera leur mise à jour plus tard.
const [sigData, setSigData] = useState (data.allSignatures.nodes);
Maintenant, nous pouvons passer sigData
comme accessoire dans
et setSigData
dans
.
Configurons notre composant Signatures pour utiliser ces données!
importez React depuis 'react';
importer la signature à partir de './signature'
const Signatures = (props) => {
const SignatureMarkup = () => {
return props.sigData.map ((signature, index) => {
revenir (
)
}).inverser()
}
revenir (
)
}
exporter les signatures par défaut
Dans cette fonction, nous allons .map ()
sur nos données de signature et créer un tableau de balisage basé sur un nouveau composant
dans lequel nous transmettons les données.
Le Le composant Signature
gérera le formatage de nos données et le renvoi d'un ensemble approprié de code HTML.
importez React de 'react';
const Signature = ({signature}) => {
const dateObj = nouvelle date (signature._ts / 1000);
let dateString = `$ {dateObj.toLocaleString ('default', {semaine: 'long'})}, $ {dateObj.toLocaleString ('default', {mois: 'long'})} $ {dateObj.getDate () } à $ {dateObj.toLocaleTimeString ('défaut', {heure: '2 chiffres', minute: '2 chiffres', heure12: faux})} `
revenir (
{signature.name} - {dateString}
{signature.message}
)};
exporter la signature par défaut;
À ce stade, si vous démarrez votre serveur de développement Gatsby, vous devriez avoir une liste de signatures existant actuellement dans votre base de données. Exécutez la commande suivante pour être opérationnel:
gatsby develop
Toute signature stockée dans notre base de données créera du HTML dans ce composant. Mais comment pouvons-nous obtenir des signatures dans notre base de données?
Configurons un composant de formulaire de signature pour envoyer des données et mettre à jour notre liste de signatures.
Faisons en sorte que notre JAMstack Guestbook soit interactif
Premièrement, nous allons configurer la base structure pour notre composant. Il affichera un formulaire simple sur la page avec une entrée de texte, une zone de texte et un bouton pour la soumission.
import React from 'react';
import faunadb, {requête as q} from "faunadb"
var client = new faunadb.Client ({secret: process.env.GATSBY_FAUNA_CLIENT_SECRET})
exporter la classe par défaut SignForm étend React.Component {
constructeur (accessoires) {
super (accessoires)
this.state = {
sigName: "",
sigMessage: ""
}
}
handleSubmit = async event => {
// Gérer la soumission
}
handleInputChange = event => {
// Lorsqu'une entrée change, mettez à jour l'état
}
render () {
revenir (
)
}
}
Pour commencer, nous allons configurer notre état pour inclure le nom et le message. Nous les remplacerons par défaut par des chaînes vides et les insérerons dans nos