![](/img/trans.png)
[英]ReactJS + NextJS - How to pass props from _app.js to page?
[英]Pass data (prop) from _app.js to getServerSideProps in a page - NextJS, latest version
我有一個自定義_app.js
:
const Layout = ({ children }) => (children);
const app = ({ Component, pageProps }) => {
pageProps.baseUrl = 'some url';
return (
<Layout>
<Component {...pageProps} />
</Layout>
)
};
還有一個頁面:
export async function getServerSideProps({ req, query, res, baseUrl }) {
// baseUrl is undefined and an error, if I am using it with destructiring
console.log(req) // There is no baseUrl
return { props: { ..... } }
}
我想設置pageProps.baseUrl= 'some url';
在_app.js
中並在包括getServerSideProps
在內的頁面組件中使用它,我該怎么做?
現在,我創建了一個文件,其中包含所有全局值,如下所示:
let store = {};
const globalStore = {};
globalStore.set = (key, value) => {
store = { ...store, [key]: value };
}
globalStore.get = (key) => {
return store[key];
}
export default globalStore;
然后在_app.js
中導入它並設置一個值:
const app = ({ Component, pageProps }) => {
globalStore.set('baseUrl', 'some url 1');
globalStore.set('baseUrl2', 'some url 2');
return (
<Layout>
<Component {...pageProps} />
</Layout>
)
}
在pages/index.js
和組件或getServerSideProps
中導入文件:
export async function getServerSideProps({ req, query, res }) {
console.log('in getServerSideProps');
console.log(globalStore.get('baseUrl'));
console.log(globalStore.get('baseUrl2'));
...
我認為,在這種特殊情況下,可以在這里使用常量而不是道具。
在常量.js 中:
export const BASE_URL = 'some url';
在您的頁面中:
import * as Constants from '../path/to/constants';
export async function getServerSideProps({ req, query, res }) {
// use Constants.BASE_URL here
return { props: { ..... } }
}
您的頁面組件和您從文件中導出的 getServerSideProps 方法是分開的,並且在不同的時間執行。 渲染組件不會調用 getServerSideProps。 我相信 Next.js 中的順序是這樣的:
pages/
中的文件尋找對應的路由在這種情況下,你創造了一個悖論。 想想道具是如何流動的:
如果 getServerSideProps 負責創建 pageProps object,也不能將 object 作為參數傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.