当前位置: 首页 > 知识库问答 >
问题:

通过重定向响应TS-pass参数

邹英悟
2023-03-14

你好,我有一个应用程序,我想在成功创建一个新房间后重定向用户。我想把他重定向到URL中带有房间ID的页面,但我想用这个重定向发送数据到组件状态。

应用程序内。我有

<Route path="/game/lobby/:id" component={LobbyView} />

IM重定向从CreateRoom组件像这样

if(this.state.redirect) {
        return <Redirect to={{
            pathname: "/game/lobby/" + this.state.roomId,
            state: { ownerName: this.state.roomOwnerName }
        }}/>
    }

这很好,可以让我改变方向。这是LobbyView的代码

    import React, { Component } from 'react';
    import {BrowserRouter as Router, Route, Link, match} from 'react-router-dom';

    interface DetailParams {
        id: string;
    }

    interface Props {
        required: string;
        match?: match<DetailParams>;
        ownerName?: string;
    }

    interface State {
        roomId?: string;
        ownerName?: string;
    }

    class LobbyView extends Component<Props, State> {

    constructor(props: Props) {
        super(props);

        this.state = {
            roomId: this.props.match?.params.id,
            ownerName: this.props.ownerName
        };
    }

    public render() {
        if(this.state.ownerName) {
            return (
                <div>
                    <h1>{this.props.match?.params.id}</h1>
                    <strong>You are owner of this room.</strong>
                </div>
            );
        }else {
            return (
                <h1>{this.props.match?.params.id}</h1>
            );
        }
    }
   }
   export default LobbyView;

但有一个主要的问题,它重定向我,但总是没有状态参数ownerName...

关键是:房间的创建者将被重定向到URL,以显示房间信息与所有者的其他信息,如果他共享此链接给其他用户,他们将拥有者名称为空,他们不能查看其他信息。

有人能帮我吗?我对react和typescript是新手,我不知道怎么做。。非常感谢:)

共有1个答案

罗烨霖
2023-03-14

位置状态数据将在location.state中可用:

this.props.location.state?.ownerName
// OR
this.props.history.location.state?.ownerName

因此,您可以:

if(this.props.location.state?.ownerName) {
  ..
}

查看此历史对象。

并且不需要将数据从“道具”或“位置状态”(您的案例)复制到“组件状态”,除非您有充分的理由这样做。

下面是如何修复组件道具的打字(将其与react-router-dom提供的RouteProps相结合):

import { RouteComponentProps } from "react-router-dom";

interface Params {
  id: string;
}

interface LocationState {
  ownerName: string;
}

// Static Context is available when you use Static Router*
interface SC {
  statusCode?: number;
}

class LobbyView extends Component<Props & RouteComponentProps<Params, SC, LocationState>, State>

*静态路由

 类似资料:
  • 我想获取。我怎样才能得到它?

  • 例如,我试图向www.testjson发出GET请求。com/json,但响应是从不同的域URL检索的,例如www.testjson。com/confirmJson。 Spring mvc是否支持此功能,特别是restTemplate.exchange功能。 我目前正在做这类事情,但我得到一个500状态码(内部服务器错误),无法找出到底是什么导致了错误。 那么RestTemplate真的可以管理重

  • 问题内容: 我有一个网页。该网页将用户重定向到另一个网页,或多或少通过以下方式: 好吧,您知道,我要做的是将GET参数转换为POST参数。不要告诉我这很不好,我知道我自己,这也不是我真正要做的,重要的是我从数组中收集数据并尝试通过POST将其提交到另一个页面。但是,如果用户关闭了JavaScript,它将无法正常工作。我需要知道的是:有没有一种方法可以通过PHP传递POST参数,以便重定向也可以通

  • 基于我之前的问题,我现在需要在响应中添加一个标题。 根据留档,我可以简单地将标头和另一个属性添加到对象。 当我对此进行测试时,它似乎没有携带标头值。 根据这篇文章,为重定向请求设置标题是不可能的。所以除了重定向,也许我应该试试别的? 有什么想法吗?

  • 环境 OS:Redhat 7 ReverseProxy:Apache(仅限) 通过:Docker 部署 ====================================================================================================================== 问题: 是否可以在Apache反向代理中进行更改,以便通过

  • 问题内容: 我正在尝试在Spring MVC应用程序中实现RESTful URL。除了处理表单提交之外,一切都很好。我需要重定向回原始表单或“成功”页面。 但是,正如我在Spring文档中所阅读的那样,如果您重定向了任何参数,则会将其放入url。那对我不起作用。解决此问题的最优雅方式是什么? 问题答案: http://jira.springframework.org/browse/SPR-6464