Я вообще не использовал getInitialProps
. Вместо этого я использую React Hook. Это работает в основном так:
async function useModel() {
const modelRef = useRef(null)
// This hook will render at build-time by Next.js's static site, in which
// case the conditional loading of the model will never happen.
//
// At startup-time, it will be re-renderered on the Electron renderer thread,
// at which time, we'll actually want to load data.
if (process.browser && !modelRef.current) {
const m = new Model()
await m.init() // <- Assumed to have some async fetching logic
modelRef.current = m
}
return modelRef.current
}
Затем компонент верхнего уровня может легко использовать наличие модели, чтобы определить, что делать дальше:
function Start() {
const model = useModel()
if (!model) {
return <div>Loading...</div>
} else {
return <MyProperUI model={model} />
}
}
Или вы можете легко настроить его так, чтобы отображался незаселенный пользовательский интерфейс по умолчанию или что-то еще.
Таким образом, в основном используйте getInitialProps
для кода, который вы хотите запустить ровно один раз , на стороне сервера / во время сборки или на стороне клиента. В противном случае используйте другие средства инициализации. Как видно здесь, крюки позволяют это с довольно минимальным шаблоном.