Reactjs React router dom访问页面仅来自应用程序,不来自url

Reactjs React router dom访问页面仅来自应用程序,不来自url,reactjs,react-router-dom,Reactjs,React Router Dom,我是一个新的反应,反应和redux 我想知道我是否可以添加一个不能从url访问的路由,只能从应用程序访问。 使用案例是,我正在尝试构建注册表单页面,该页面将在成功注册后向电子邮件发送验证码,应用程序将重定向到该页面以输入验证码。 我正在考虑创建一个新的验证码页面,但该页面不能通过在url中键入来访问,它应该只能通过应用程序访问 这是可能的还是我应该采取另一种方法?在我看来,从URL访问您的“输入验证码”页面不是问题。但是,如果你想这样做,那么是的,这是可以做到的 验证页的呈现组件需要检查某些条件

我是一个新的反应,反应和redux

我想知道我是否可以添加一个不能从url访问的路由,只能从应用程序访问。 使用案例是,我正在尝试构建注册表单页面,该页面将在成功注册后向电子邮件发送验证码,应用程序将重定向到该页面以输入验证码。 我正在考虑创建一个新的验证码页面,但该页面不能通过在url中键入来访问,它应该只能通过应用程序访问


这是可能的还是我应该采取另一种方法?

在我看来,从URL访问您的“输入验证码”页面不是问题。但是,如果你想这样做,那么是的,这是可以做到的

验证页的呈现组件需要检查某些条件。如果满足该条件,则加载页面。如果没有,它会将
呈现到表单页面

我正在使用一个属性作为该条件。当您在应用程序中导航时,您将通过使用而不仅仅是路径字符串在
组件中传递此属性

<Link to={{ pathname: "/verify", state: { fromApp: true } }}>Verify</Link>

我创建了一个非常简单的

你会被重定向。但是你可以通过点击“验证”链接来访问它

完整代码:

import {
  BrowserRouter,
  Link,
  Redirect,
  Route,
  Switch,
  useLocation
} from "react-router-dom";

const Home = () => (
  <div>
    <h1>Home</h1>
    <Link to={{ pathname: "/verify", state: { fromApp: true } }}>Verify</Link>
  </div>
);

const VerificationPage = () => {
  const { state } = useLocation();

  if (!state?.fromApp) {
    return <Redirect to="/" />;
  }

  return (
    <div>
      <h1>Enter Verification Code</h1>
      <input />
      <button>Submit</button>
    </div>
  );
};

export default function App() {
  return (
    <BrowserRouter>
      <Switch>
        <Route path="/verify" component={VerificationPage} />
        <Route path="/" component={Home} />
      </Switch>
    </BrowserRouter>
  );
}
导入{
浏览器路由器,
链接
重新使用
路线,,
转换
使用地点
}从“反应路由器dom”;
常量Home=()=>(
家
验证
);
常量验证页=()=>{
const{state}=useLocation();
如果(!state?.fromApp){
返回;
}
返回(
输入验证码
提交
);
};
导出默认函数App(){
返回(
);
}

是的,这是可能的。如果不满足某些条件,则希望此管线的渲染组件渲染。我想在这种情况下,我会使用location.state属性。当您在应用程序中导航时,您将在组件中传递此属性。我不熟悉此位置状态属性。你能提供如何使用它的文档链接吗?
import {
  BrowserRouter,
  Link,
  Redirect,
  Route,
  Switch,
  useLocation
} from "react-router-dom";

const Home = () => (
  <div>
    <h1>Home</h1>
    <Link to={{ pathname: "/verify", state: { fromApp: true } }}>Verify</Link>
  </div>
);

const VerificationPage = () => {
  const { state } = useLocation();

  if (!state?.fromApp) {
    return <Redirect to="/" />;
  }

  return (
    <div>
      <h1>Enter Verification Code</h1>
      <input />
      <button>Submit</button>
    </div>
  );
};

export default function App() {
  return (
    <BrowserRouter>
      <Switch>
        <Route path="/verify" component={VerificationPage} />
        <Route path="/" component={Home} />
      </Switch>
    </BrowserRouter>
  );
}