我正在使用 Next Js (React SSR) 制作服务器端渲染应用程序。
Index.js(简单地调用index中的另一个组件Layout)
import Layout from "./layout";
import React from "react";
class Home extends React.Component {
render() {
return (
<div>
<Layout />
</div>
);
}
}
export default Home;
布局.js
import React from "react";
import Product from "./product";
class Layout extends React.Component {
static async getInitialProps() {
const res = await fetch("https://api.github.com/repos/developit/preact");
console.log(res);
const json = await res.json();
return { stars: json.stargazers_count };
}
componentDidMount() {
if (localStorage.getItem("userLoggedIn")) {
//Get products details for logged in user api
//For now let us consider the same api
// const res = fetch("https://api.github.com/repos/developit/preact");
// const json = res.json(); // better use it inside try .. catch
// return { stars: json.stargazers_count };
} else {
// Get product details for guest user api
//For now let us consider the same api
// const res = fetch("https://api.github.com/repos/developit/preact");
// const json = res.json();
// return { stars: json.stargazers_count };
}
}
render() {
return (
<div>
This is layout page
<Product stars={this.props.stars} />
</div>
);
}
}
export default Layout;
完整的简单应用示例在这里:https : //codesandbox.io/s/nextjs-getinitialprops-748d5
我在这里的问题是,我试图通过props来product
从网页layout
页面和props从收到getInitialProps
(SSR)..但是你可以看到在所提供的示例中,props都没有工作,它仍然给出不确定的this.props.stars
。
如果我将此代码移入componentDidMount
并使用setState
和传递状态作为props将起作用,但不会在视图页面源中显示从 api 获取的数据。
注意:请不要将此逻辑移动到它工作的 index.js 文件中,但在我的实际应用程序中它是动态路由页面,我将根据在该页面上获取的查询参数获取 api。
如果您进入此链接https://748d5.sse.codesandbox.io/并单击,ctrl + u
那么您将看到我还需要从 api 获取的动态内容的源代码。
为了实现这个动态内容(在这个例子中星星数)只在查看源中显示,我正在做所有这些都是为了 SEO 目的。