重定向到 React 中的另一条路线时如何传递状态/道具?

Posted

技术标签:

【中文标题】重定向到 React 中的另一条路线时如何传递状态/道具?【英文标题】:How to pass state/props when redirecting to another route in React? 【发布时间】:2017-02-12 07:52:24 【问题描述】:

我有一个注册表单,在用户注册后,它会重定向到电子邮件确认页面 (/confirmation),用户在此输入我通过电子邮件发送的确认代码。当用户提交确认代码时,我想将代码和用户的电子邮件发送到服务器端。

我的注册表单代码(简体):

    constructor(props)
          super(props);
          this.state = 
             email: '',
             password: '',
             errors: ,
          
       
    handleSubmit(e)
        e.preventDefault();
        this.props.userSignup(this.state).then(
            () => 
               this.context.router.push(
                  pathname: '/confirmation'
               )
            ,

         )
   
   render() ...

我不想在我的路径中添加任何参数。 如何将this.state.email 传递到确认页面?

【问题讨论】:

使用 react-router github.com/ReactTraining/react-router 【参考方案1】:

2021

你也可以通过这个组件从 react-router 重定向:

...
if (shouldRedirect) 
     return <Redirect to="/some-path" state= value: "hey">

return <div>Welcome</div>

然后在新组件中使用:

...
const location = useLocation()
const value = location.state.value

如果您使用的是打字稿,请将类型添加到状态中:

interface State 
    value: string

const location = useLocation<State>()

【讨论】:

【参考方案2】:

如果您不想在页面刷新时丢失状态,您可以使用本地存储:

handleSubmit() 
  localStorage.setItem('email',
  JSON.stringify(this.state.email));
               

然后从任何其他页面上的本地存储中检索,可能在 componentWillMount 中:

componentWillMount()
  let email = '';
  if (localStorage && localStorage.getItem('email')) 
     email = JSON.parse(localStorage.getItem('email'));
    
   this.setState(email: email)

【讨论】:

【参考方案3】:

我在没有上下文对象的情况下传递数据的方法是使用历史道具,

this.props.history.push(
             pathname:"/shopdetail",
             state:
                 key:"value"
              
            );

在 ShopDetail 组件中,您可以访问对象,例如,

this.props.location.state.key

【讨论】:

【参考方案4】:

我想通了。

 this.context.router.push(
     pathname: '/confirmation',
     state: email: this.state.email  
 )

并通过以下方式访问状态:

  this.props.location.state.email

【讨论】:

非常感谢您发布您的答案,遇到了同样的问题 @Full-Hybrid 没问题! 值得注意的是,上下文在 React 中不稳定或不推荐使用。 如果页面刷新状态会丢失 有谁知道如何将函数作为道具传递。我收到一个 DataCloneError

以上是关于重定向到 React 中的另一条路线时如何传递状态/道具?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4如何检查一条路线是不是仅来自另一条路线/重定向?

在我的 laravel 4 和 angularjs 应用程序中从一条路线重定向到另一条路线

如何使用 react-router 重定向到另一条路由?

React Hooks with React Router v4 - 我如何重定向到另一个路由?

如何在提交表单时将结果重定向到React中的另一个页面

我如何使用角度路由重定向用户