当前位置: 首页 > 面试题库 >

在提交表单时进行React Router v4重定向

仉成益
2023-03-14
问题内容

全新的响应,在“登录”页面上单击“提交”后尝试重定向到“主页”。尝试遵循React Router教程。

当我单击表单上的提交按钮并在控制台上记录状态和fakeAuth.isAuthenticated时,它们都返回true。但是,重定向不会触发。

Login.js

class Login extends Component {
    constructor(props) {
        super(props);
        this.state = {
            portalId: "",
            password: "",
            redirectToReferrer: false
        }

        this.handleSubmit = this.handleSubmit.bind(this);
    }


    handleSubmit(e) {
        fakeAuth.authenticate(() => {
            this.setState({
                portalId: this.refs.portalId.value,
                password: this.refs.password.value,
                redirectToReferrer: true
            })
        })
        e.preventDefault();
    }


    render() {
        const redirectToReferrer = this.state.redirectToReferrer;
        if (redirectToReferrer === true) {
            <Redirect to="/home" />
        }

Routes.js

export const fakeAuth = {
    isAuthenticated: false,
    authenticate(cb) {
        this.isAuthenticated = true
        setTimeout(cb, 100)
    },
    signout(cb) {
        this.isAuthenticated = false
        setTimeout(cb, 100)
    }
}

const PrivateRoute = ({ component: Component, ...rest }) => (
    <Route {...rest} render={() => (
        fakeAuth.isAuthenticated === true
        ? <Component {...this.props}/>
        : <Redirect to="/" />
    )}/> 
)


export default () => (
    <BrowserRouter>
        <div>
            <Navbar />
            <Switch>
                <Route path="/" exact component={Login} />
                <Route path="/register" exact component={Register} />
                <Route path="/home" exact component={Home} />
            </Switch>
        </div>
    </BrowserRouter>
);

问题答案:

您必须返回Redirectrender方法(否则将不会被渲染,因此将不会发生重定向):

  render() {
        const redirectToReferrer = this.state.redirectToReferrer;
        if (redirectToReferrer === true) {
            return <Redirect to="/home" />
        }
        // ... rest of render method code
   }


 类似资料:
  • 下面是MultistepForm的代码。我已经实现了一个多步骤表单功能,所以这里一切都很好,只是问题是在这个表单中,我在最后一步有一个预览页面,所以当我点击提交按钮时,表单正在消失,按钮正在顶部移动。所以如果有人能帮我请。

  • 问题内容: 我搜索了一堆页面,但是找不到我的问题,所以我不得不发表一个帖子。 我有一个带有提交按钮的表单,提交后我不希望它刷新或重定向。我只希望jQuery执行功能。 形式如下: 这是jQuery: 问题答案: 只需处理Submit事件中的表单提交,然后返回false: 您不再需要提交按钮上的onclick事件:

  • 早上好,我在一个测试AMP页面上有一个表单(是AMP验证),表单工作:我收到了带有结果的电子邮件(我使用一个php来处理它)。我不知道(我做了一些尝试,但我想我仍然错过了一个例子)让AMP页面正确响应的语法(现在我得到订阅失败!但我确实收到了电子邮件)或提交后重定向。这里我的例子: AMP带有表单的页面(我在提交后收到表单结果,但我不知道如何重定向或获得“订阅成功!”(信息) 带有表单的非AMP页

  • 我在一个基于Spring的Web应用程序(版本4.1.6。RELEASE,Spring Security 4.0.0。RELEASE)中工作,我收到错误(POST方法)。根据Spring的留档“Spring Security自动为任何

  • 本文向大家介绍EasyUI中在表单提交之前进行验证,包括了EasyUI中在表单提交之前进行验证的使用技巧和注意事项,需要的朋友参考一下 使用EasyUi我们可以在客户端表单提交之前进行验证,过程如下:只需在onSubmit的时候使用return $("#form1").form('validate')方法即可,EasyUi中form模块中的from('validate')方法会自行对我们指定的表单

  • 问题内容: 我认为这很简单,但是正如标题所示,在任何地方都找不到如何执行此操作的方法,就像成功提交表单后如何处理ajax一样。我尝试搜索它,但所看到的只是我需要的相反内容,即在ajax发布后提交。我将尝试草拟与Im正在研究的程序非常相似的程序。 这是我的表格。 这是一个有关ajax帖子的示例(不要介意该帖子的逻辑): 现在,我想做的就是提交表单时,如果提交成功,就会触发ajax发布。因此,就像在一