websites tutorial serve react for cli gatsby

tutorial - GatsbyJS obteniendo datos de la API Restful



gatsby tutorial (3)

Las respuestas dadas anteriormente funcionan, excepto que la consulta en el paso 2 parece devolver solo un nodo para mí. Puedo devolver todos los nodos agregando totalCount como un hermano de bordes. Es decir

{ allRandomUser { totalCount edges { node { id gender name { first last } } } } }

Soy nuevo tanto en React como en GatsbyJS. Estoy confundido y no pude descifrar de una manera sencilla la carga de datos de la API Restful de terceros.

por ejemplo: me gustaría obtener datos de randomuser.me/API y luego poder usar los datos en las páginas.

Digamos algo como esto:

import React from ''react'' import Link from ''gatsby-link'' class User extends React.Component { constructor(){ super(); this.state = { pictures:[], }; } componentDidMount(){ fetch(''https://randomuser.me/api/?results=500'') .then(results=>{ return results.json(); }) .then(data=>{ let pictures = data.results.map((pic,i)=>{ return( <div key={i} > <img key={i} src={pic.picture.medium}/> </div> ) }) this.setState({pictures:pictures}) }) } render() { return (<div>{this.state.pictures}</div>) } } export default User;

Pero me gustaría obtener la ayuda de GraphQL para filtrar y clasificar los usuarios y etc ...

¿Podría ayudarme, por favor, a encontrar la muestra de cómo puedo obtener datos e insertarlos en GraphQL en gatsby-node.js


Muchas gracias, esto está funcionando bien para mí, solo cambio pequeñas partes del gastbyjs-node.js porque produce un error al usar sync y esperar, creo que necesito cambiar alguna sección de un proceso de construcción para usar babel para permitirme para utilizar la sincronización o esperar.

Aquí está el código que funciona para mí.

const axios = require(''axios''); const crypto = require(''crypto''); // exports.sourceNodes = async ({ boundActionCreators }) => { exports.sourceNodes = ({boundActionCreators}) => { const {createNode} = boundActionCreators; return new Promise((resolve, reject) => { // fetch raw data from the randomuser api // const fetchRandomUser = () => axios.get(`https://randomuser.me/api/?results=500`); // await for results // const res = await fetchRandomUser(); axios.get(`https://randomuser.me/api/?results=500`).then(res => { // map into these results and create nodes res.data.results.map((user, i) => { // Create your node object const userNode = { // Required fields id: `${i}`, parent: `__SOURCE__`, internal: { type: `RandomUser`, // name of the graphQL query --> allRandomUser {} // contentDigest will be added just after // but it is required }, children: [], // Other fields that you want to query with graphQl gender: user.gender, name: { title: user.name.title, first: user.name.first, last: user.name.last }, picture: { large: user.picture.large, medium: user.picture.medium, thumbnail: user.picture.thumbnail } // etc... } // Get content digest of node. (Required field) const contentDigest = crypto.createHash(`md5`).update(JSON.stringify(userNode)).digest(`hex`); // add it to userNode userNode.internal.contentDigest = contentDigest; // Create node with the gatsby createNode() API createNode(userNode); }); resolve(); }); }); }


Si desea utilizar GraphQL para recuperar sus datos, debe crear un sourceNode. El documento sobre la creación de un complemento de origen podría ayudarlo.

Siga estos pasos para poder consultar datos de usuarios aleatorios con graphQL en su proyecto Gatsby.

1) crear nodos en gatsby-node.js

En su carpeta de proyecto raíz, agregue este código a gatsby-node.js :

const axios = require(''axios''); const crypto = require(''crypto''); exports.sourceNodes = async ({ boundActionCreators }) => { const { createNode } = boundActionCreators; // fetch raw data from the randomuser api const fetchRandomUser = () => axios.get(`https://randomuser.me/api/?results=500`); // await for results const res = await fetchRandomUser(); // map into these results and create nodes res.data.results.map((user, i) => { // Create your node object const userNode = { // Required fields id: `${i}`, parent: `__SOURCE__`, internal: { type: `RandomUser`, // name of the graphQL query --> allRandomUser {} // contentDigest will be added just after // but it is required }, children: [], // Other fields that you want to query with graphQl gender: user.gender, name: { title: user.name.title, first: user.name.first, last: user.name.last, }, picture: { large: user.picture.large, medium: user.picture.medium, thumbnail: user.picture.thumbnail, } // etc... } // Get content digest of node. (Required field) const contentDigest = crypto .createHash(`md5`) .update(JSON.stringify(userNode)) .digest(`hex`); // add it to userNode userNode.internal.contentDigest = contentDigest; // Create node with the gatsby createNode() API createNode(userNode); }); return; }

axios para obtener datos, así que necesitarás instalarlo: npm install --save axios

explicación:

El objetivo es crear cada nodo para cada dato que desee utilizar. De acuerdo con la documentación de createNode , debe proporcionar un objeto con pocos campos obligatorios (id, parent, internal, children).

Una vez que obtenga los datos de resultados de la API de usuario aleatorio, solo tiene que crear este objeto de nodo y pasarlo a la función createNode() .

Aquí hacemos un mapa de los resultados que desea obtener 500 usuarios aleatorios https://randomuser.me/api/?results=500 .

cree el objeto userNode con los campos requeridos y deseados. Puede agregar más campos según los datos que desee utilizar en su aplicación.

Simplemente cree el nodo con la función createNode() de la API de Gatsby.

2) consulta tus datos con GraphiQL

Una vez que haya hecho eso, ejecute gatsby develop y vaya a http://localhost:8000/___graphql .

Puedes jugar con graphiQL para crear tu consulta perfecta. Como denominamos el tipo internal.type de nuestro objeto de nodo ''RandomUser'' , podemos consultar a allRandomUser para obtener nuestros datos.

{ allRandomUser { edges { node { gender name { title first last } picture { large medium thumbnail } } } } }

3) Usa esta consulta en tu página de gatsby.

En su página, por ejemplo src/pages/index.js , use la consulta y muestre sus datos:

import React from ''react'' import Link from ''gatsby-link'' const IndexPage = (props) => { const users = props.data.allRandomUser.edges; return ( <div> {users.map((user, i) => { const userData = user.node; return ( <div key={i}> <p>Name: {userData.name.first}</p> <img src={userData.picture.medium} /> </div> ) })} </div> ); }; export default IndexPage export const query = graphql` query RandomUserQuery { allRandomUser { edges { node { gender name { title first last } picture { large medium thumbnail } } } } } `;

Eso es !