我是 Next.js 的新手,我正在尝试理解建议的结构并处理页面或组件之间的数据。
例如,在我的页面中home.js,我获取了一个调用的内部 API /api/user.js,它从 MongoDB 返回一些用户数据。我通过使用fetch()从 inside 调用 API 路由来做到这一点getServerSideProps(),它在一些计算后将各种道具传递给页面。
根据我的理解,这对 SEO 有好处,因为道具在服务器端被获取/修改,页面让它们准备好呈现。但后来我的Next.js文档,你不应该用在阅读fetch()到所有的API路线getServerSideProps()。那么我应该怎么做才能遵守良好的实践和良好的 SEO?
我没有home.js在 API 路由本身中进行所需计算的原因是我需要来自这个 API 路由的更多通用数据,因为我也会在其他页面中使用它。
我还必须考虑缓存,哪个客户端使用 SWR 来获取内部 API 非常简单,但服务器端我还不确定如何实现它。
home.js:
export default function Page({ prop1, prop2, prop3 }) {
// render etc.
}
export async function getServerSideProps(context) {
const session = await getSession(context)
let data = null
var aArray = [], bArray = [], cArray = []
const { …Run Code Online (Sandbox Code Playgroud) 如果状态作为 props 传递给组件,并且该组件位于 内部Tab.Pane,则当状态更改时,它不会更新其 props。
仅当我以编程方式以 250 来回切换选项卡setTimeout(或显然手动)时,它才有效,这意味着需要再次切换选项卡以重新渲染组件(因此获得更新的状态)
奇怪的是,如果我使用存储系统作为 redux 将 prop 传递给组件而不是状态,那么这是同样的事情。
我还尝试添加mountOnEnter={true} unmountOnExit={true}到窗格中,顺便说一句,它已经设置为将Tab.Container所有内容包裹在其中,但没有任何区别。
重现该行为的步骤:
useState某种状态存储Tab.Pane使用的react-bootstrap版本:"react-bootstrap": "^1.5.0"
我的 Tab.Pane 示例:
<Tab.Pane eventKey="items">
<ItemsList items={data} />
</Tab.Pane>
Run Code Online (Sandbox Code Playgroud) 我想知道是否可能以及如何将我的顶级页面包装_app.js在 Redux 提供程序中(考虑到我已经使用 Next-auth 提供程序包装了它,例如:
import React from "react"
import { Provider } from 'next-auth/client'
import '../public/global.scss'
export default function App ({ Component, pageProps }) {
return (
<Provider
options={{
clientMaxAge: 0,
keepAlive: 5 * 60
}}
session={pageProps.session} >
<Component {...pageProps} />
</Provider>
)
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试添加 Redux 时,<Provider ..它说Provider已经定义了。
我在app start的主片段中处理视图的 .setVisibility().所以我想要的是视图在应用程序启动时是不可见的(为此我在onCreateView中设置了INVISIBLE)并且当我在应用程序打开时从其他活动回到我的片段时可见:为此我尝试使用onRestart ()设置视图 VISIBLE但它无法解析onRestart方法)onRestart已弃用或?谢谢
编辑:对于以下所有建议使用onResume(并给出-1)的答案,onResume根本不作为onRestart工作,因为在onCreateView之后正在调用.