我用的是next.js并try 执行以下操作:

  1. 在_app中获取与用户数据相关的基础数据.js.数据包括标题(导航栏)和一些社交链接(页脚).

  2. 在构建时将该数据传递给其他组件,如页脚和导航栏(用于静态站点生成).

为此,我从应用程序中导出了getStaticProps.js文件.但它似乎不起作用.这是我的应用程序.js.

import Layout from "../src/Layout";
import "../styles/globals.css";
import getAppData from "services/appData";

export default function App({ data, Component, pageProps }) {
  console.log(data, "data"); // data is undefined here
  return (
    <>
      <Layout data={data}>
        <Component {...pageProps} />
      </Layout>
    </>
  );
}

export async function getStaticProps() {
  console.log("working on it dude"); // this message is not logged in console (terminal)
  let data = await getAppData(CLIENTID);
  console.log(data); // data is undefined here as well
  return {
    props: {
      data: data,
    },
    revalidate: 60,
  };
}

还有布局.js

import React, { useState } from "react";
import Head from "next/head";
import Footer from "./Footer";
import Navbar from "./Navbar";

// Contexts
export const toggleMenu = React.createContext();

export default function Layout({ data, children }) {
  // States
  const [showNav, setShowNav] = useState(true);
  const [showFooter, setShowFooter] = useState(true);

  return (
    <>
      <Head>
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      </Head>
        <toggleMenu.Provider
          value={{ showNav, showFooter, setShowFooter, setShowNav }}
        >
          {showNav ? <Navbar data={data.navbar} /> : null}
          {children}
          {showFooter ? <Footer data={data.footer} /> : null}
        </toggleMenu.Provider>
    </>
  );
}

data是未定义的,即使我在getStaticProps中将一个简单字符串作为props传递.


export async function getStaticProps() {
  return {
    props: {
      data: "something",
    },
    revalidate: 60,
  };
}

我知道我们不能在页面以外的文件中使用getStaticProps,所以我必须在_应用程序中使用它.只使用js,并将其传递给<Layout data={data}/>个组件(如果不存在其他解决方案).

我可以在索引中使用getStaticProps.js页面,但导航栏和页脚用于它的父组件,即.感谢您的帮助.

推荐答案

正如上面提到的_app.js不支持getStaticPropsgetServerSideProps,你只能在应用内使用getInitialProps.js


export default function App({ Component, pageProps }) {
  console.log(pageProps.data, "data"); 
  return (
    <>
      <Layout data={pageProps.data}>
        <Component {...pageProps} />
      </Layout>
    </>
  );
}

App.getInitialProps = async () => {
  let pageProps = {};

  try {
    let data = await getAppData(CLIENTID);
    pageProps["data"] = data;
  } catch (error) {}

  return { pageProps };
};




Javascript相关问答推荐

我在这个黑暗模式按钮上做错了什么?

使搜索栏更改语言

Ember.js 5.4更新会话存储时如何更新组件变量

我正在建立一个基于文本的游戏在react ,我是从JS转换.我怎样才能使变量变呢?

使用Google API无法进行Web抓取

JS:XML insertBefore插入元素

try 使用javascript隐藏下拉 Select

如何在Svelte中从一个codec函数中调用error()?

在VS代码上一次设置多个变量格式

如何在Java脚本中对列表中的特定元素进行排序?

令牌JWT未过期

是否可以在不更改组件标识的情况下换出Reaction组件定义(以维护状态/引用等)?如果是这样的话,是如何做到的呢?

未找到用于 Select 器的元素:in( puppeteer 师错误)

bootstrap S JS赢得了REACT中的函数/加载

使用Library chart.js在一个带有两个y轴的图表中绘制两个数据集

React数组查找不读取变量

使用props 将VUE 3组件导入JS文件

MUI-TABLE:MUI表组件中交替行的不同 colored颜色 不起作用

ReactJS Sweep Line:优化SciChartJS性能,重用wasmContext进行多图表渲染

如何在底部重叠多个div?