gpt4 book ai didi

ReactJS - 如何使用 React Router 创建具有单一路径的多步骤组件/表单

转载 作者:行者123 更新时间:2023-12-04 16:37:24 25 4
gpt4 key购买 nike

我想在用户输入请求的信息后在组件之间切换。
将按此顺序向用户显示的组件:

  1. {MobileNum } 输入手机号码
  2. {IdNumber } 身份证号码
  3. {CreatePassword } 创建密码

完成所有这些步骤后,浏览器将切换到主页。用户必须不能在页面之间移动,直到他在每个组件中填写每个请求。

现在我想要一个更好的方法来使用 router 就像我在 Login 中有 3-4 个组件一样,并且必须在安全的 whey 中,用户也不能是能够通过 URL 手动切换组件。

import React, { Component } from 'react';
import {
BrowserRouter as Router,
Redirect,
Route,
Switch,
} from 'react-router-dom';
import MobileNum from './MobileNum.jsx';
import IdNumber from './IdNum.jsx';
import CreatePassword from './createPassword .jsx';

class SignUp extends Component {
constructor(props) {
super(props);
}

render() {
return (
<div>
<Router>
<Switch>
//// Here needs to know how to navigate to each component on its turn
<Route path='/' component={MobileNum} />
<Route path='/' component={IdNumber} />
<Route path='/' component={CreatePassword } />
</Switch>
</Router>
</div>
);
}
}

export default SignUp ;

我在 reactrouter.com 和许多其他网站上搜索了干净的解决方案,但没有找到答案。
知道最好的方法是什么吗?

谢谢

最佳答案

由于像位置这样的路由器变量是不可变的,条件渲染本身会是更好的选择,如果你不想使用 if else,你可以尝试切换。我在下面给出了一个例子,当在每个组件中提交值时,你必须触发 afterSubmit 。如果你使用 redux,你可以更好地实现它,因为你可以将值存储在 redux 状态中,并使用 dipatch 直接从每个组件设置它。

//App.js
import React, { useState } from 'react';
import MobileNum from './MobileNum.jsx';
import IdNumber from './IdNum.jsx';
import CreatePassword from './createPassword .jsx';

function App (){
const [stage,setStage]= useState(1);
switch(stage){
case 2:
return <IdNumber afterSubmit={setStage.bind(null,3)}/>
break;
case 3:
return <CreatePassword afterSubmit={setStage.bind(null,4)} />
case 4:
return <Home />
break;
default:
return <MobileNum afterSubmit={setStage.bind(null,2)}/>
}
}

export default App;

//Root

import React, { Component } from 'react';
import App from './App.jsx';
import {
BrowserRouter as Router,
Redirect,
Route,
Switch,
} from 'react-router-dom';

class Login extends Component {
constructor(props) {
super(props);
}

render() {
return (
<div>
<Router>
<Switch>
<Route path='/' component={App} />
</Switch>
</Router>
</div>
);
}
}

//Add on - Sign up form class based
class SignUp extends React.Component {
constructor(props) {
super(props);
this.state = { stage: 1 };
}

render() {
switch (this.state.stage) {
case 2:
return <IdNumber afterSubmit={() => this.setState({ stage: 3 })} />;
break;
case 3:
return <CreatePassword afterSubmit={() => this.setState({ stage: 4 })} />;
case 4:
return <Home />;
break;
default:
return <MobileNum afterSubmit={() => this.setState({ stage: 2 })} />;
}
}
}

关于ReactJS - 如何使用 React Router 创建具有单一路径的多步骤组件/表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68191673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com