我们有一个用户平台项目。每个用户都有一个配置文件详细信息页面(/{id}},我们是在使用createPages()构建时创建的。当登录的用户对其配置文件进行更改时,这些更改将保留在数据库中,但在再次触发构建之前,这些更改对他是不可见的。用户可能会认为他的更改丢失了,并且可能会感到沮丧。我们理想的解决方案是显示动态登录的用户的配置文件。
有没有可能用同一个url上的动态页面覆盖静态创建的页面?我们希望url保持不变(/{id}),因为用户将与其他用户共享他的链接。
// Generation of static pages
exports.createPages = async function ({ actions, graphql }) {
const { data } = await graphql(`
query {
apollo {
allProfiles {
email
id
}
}
}
`)
data.apollo.allProfiles.forEach((profile) => {
const email = profile.email
const id = profile.id
actions.createPage({
path: id,
component: require.resolve(`./src/templates/profile-detail.js`),
context: { email: email },
})
})
}发布于 2020-09-01 22:57:17
我认为人们对Gatsby的工作方式存在误解。您的页面在内容方面是静态的,但在JavaScript和React的逻辑方面是动态的。
您的页面目前是静态的,因为您是在构建时填充组件的,然而,您需要向和端点发出一个API请求(例如,通过axios ),以获取数据库中的更改,填充您的React状态,并在JavaScript逻辑中显示/隐藏组件,而不是在服务器本身中。
您的/{id}将完全保持不变,因为它是在createPage期间创建的,但是您将根据用户的操作添加一个逻辑。
https://stackoverflow.com/questions/63684608
复制相似问题