Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

249
Visualizações
¿Cuáles son las mejores prácticas para inicializar una aplicación web Next.js con datos de una API y agregarlos al estado?

Estoy usando Zustand para la gestión estatal (aunque me imagino que el mismo principio se aplica a todas las bibliotecas de gestión estatal como Redux o Recoil). He pensado y probado:

  1. Obtener datos usando getStaticProps() y usando useEffect() para enviar los datos al estado durante el renderizado de la primera página. El problema es que los datos no se envían al estado hasta que se carga esa página específica. No quiero usar getInitialProps() , ya que está en desuso.
  2. Una solución que funcionó (más o menos, aunque no estoy seguro de que sea la mejor práctica) fue usar SWR en _app.js para obtener los datos de la API cuando la aplicación se inicializa por primera vez y enviar los datos al estado con useEffect() . De esta forma, podía llenar libremente las páginas usando los datos del estado y solo requería una llamada a la API. Ejemplo a continuación:
 function MyApp({ Component, pageProps }) { // Load data from api with SWR const fetcher = (url) => fetch(url).then((res) => res.json()); const { data, error } = useSWR( "https://example.com/api", fetcher ); // Get data setter from state const setData = useStore((state) => state.setData); // When data is fetched successfully, populate state with data useEffect(() => { if (data) { setData(data); } }, [data]); if (error) return "Error has occured"; if (!data) return "Loading..."; return ( <Layout> <Component {...pageProps} /> </Layout> ); } export default MyApp;

¿Hay mejores formas de obtener datos y usarlos para completar el estado la primera vez que se carga la aplicación? ¿Cuáles son las mejores prácticas?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Lo hice funcionar de la manera correcta usando el proveedor de contexto Zustand e inicializándolo usando Nextjs pageProps y getStaticProps() .

_app.js

 function MyApp({ Component, pageProps }) { const createStore = initStore(pageProps.initZustand); return ( <Provider createStore={createStore}> <Component {...pageProps} /> </Provider> ); } export default MyApp;

tienda.js

 export const { Provider, useStore } = createContext(); let store = { names: ["Name 1", "Name 2", "Name 3"], random: [], setRandom: (data) => { set((state) => ({ random: data })); }, }; export const initStore = (data) => { const createStore = () => create( devtools((set, get) => ({ ...store, ...data, })) ); return createStore; };

index.js getStaticProps:

 export async function getStaticProps(context) { const res = await fetch("https://jsonplaceholder.typicode.com/users"); const posts = await res.json(); return { props: { initZustand: { posts: posts, }, }, }; }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda