reactjs - 在 Gatsby.js 中禁用直接路由到特定页面

标签 reactjs routes gatsby

我有成功页面,在 Gatsby 中提交表单时必须显示该页面。但用户可以直接访问/success页面。有什么办法可以预防吗?

最佳答案

有几种方法可以做到这一点。 One is outlined here by Gatsby并涉及创建仅客户端路由(也就是说,Gatsby 不会让 React 在服务器端渲染它,但会路由到客户端/浏览器上的组件)。看起来像这样:

exports.onCreatePage = async ({ page, actions }) => {
  const { createPage } = actions

  // page.matchPath is a special key that's used for matching pages
  // only on the client.
  if (page.path.match(/^\/app/)) {
    page.matchPath = "/app/*"

    // Update the page.
    createPage(page)
  }
}

我采取的方法是渲染页面,特别是当它不是特别敏感的页面时,但检查渲染时的某些条件,并在条件不满足时使用navigate t 满意。

例如,如果您将 formSubscribed 存储在 AppContext 中,则可以执行以下操作:

import React, { useContext } from "react"
import { navigate } from "gatsby"

const SuccessPage = () => {
  const { formSubmitted } = useContext(AppContext)
  return formSubmitted ? <div>Thanks!</div> : navigate("/contact", { replace: true })
}

关于reactjs - 在 Gatsby.js 中禁用直接路由到特定页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56820079/

相关文章:

reactjs - React Router v4默认页面(未找到页面)

javascript - 不同组件中的提交按钮会造成可访问性问题

asp.net - MVC4 - 有没有办法将根路由到 "normal"未处理的 html 页面?

reactjs - 在 Gatsbyjs (Reactjs) 项目中加载 Google Place API

javascript - react 形式 : Updating the UI based on the Axios GET call response in withFormik()

command-line-interface - 如何回滚 gatsby 版本?

zurb-foundation - Facebook ReactJS 和 Zurb 应用基金会?

javascript - 子组件可以访问其包含组件的方法吗?

linux - 如何从 PPP 接口(interface)转发数据包?

c# - ASP MVC 5 在 URL 中隐藏区域(路由)