javascript - React - 需要帮助将路径转换为字符串,以便用户在单击 img 时被重定向到 Stripe
问题描述
所以让我解释一下发生了什么。我调用了这个组件PaymentAccountLandingPage
,并在该组件中导入并渲染了这个组件ConnectedAccountsButton
,它是我使用 Stripe 图像创建的 Stripe 按钮,基本上使它就像按钮一样。因此,我希望用户在单击时被重定向到登录页面,以便使用 Stripe 创建帐户img/button
。问题是我需要进行 axios 调用,createAcctLink
以便它返回一个路径名,其中包含accountId
我需要在路径中具有的路径名(我显然在下面的 acctId 中使用了 XXXXXX)。但是我需要路径中的该信息,因为我团队中的其他人稍后会在他们被重定向回来时解析问题是来自response.item
以下的响应数据:
https://connect.stripe.com/express/onboarding/XXXXXXXXXXXX
请注意,它不是字符串,我什至使用该toString
方法尝试将其转换为字符串,但没有运气。有人有其他解决方案吗?我不想使用window.location.assign()
,或者window.location.href
因为我已经知道如何这样做,但我想找出另一种方法的原因是因为将用户重定向到 Stripe 需要 10-15 秒。我想使用的原因Link
react-router-dom
是因为它很快,而且我知道也有,Redirect
但无论哪种方式,我都需要将路径作为字符串,所以这是我的问题。如果有人有任何很棒的解决方案或解决方法。这是我的ConnectedAccountsButton
:
import React from "react";
import connectbutton from "@assets/images/stripe/ConnectedAccountsButton.png";
import { createAccountLink } from "../../services/connectedAccountsService";
import { Link } from "react-router-dom";
class ConnectedAccountsButton extends React.Component {
state = {
path: "",
};
componentDidMount() {
createAccountLink()
.then(this.onAccountLinkSuccess)
.catch(this.onAccountLinkError);
}
onAccountLinkSuccess = (response) => {
let pathUrl = response.item.toString();
console.log("Success Response:", pathUrl);
this.setState(() => {
return {
path: pathUrl,
};
});
};
onAccountLinkError = (err) => {
console.error("Error Response: ", err);
};
render() {
return (
<Link to={this.state.path}>
<img
src={connectbutton}
style={{ width: "200px", cursor: "pointer" }}
alt="Connected Accounts Link"
/>
</Link>
);
}
}
export default ConnectedAccountsButton;
解决方案
我正在回答我自己的问题,因为我在朋友的帮助下找到了解决方案。奇怪的是我们用过typeof
它response.item
,它已经是一个字符串。没有理由这不应该奏效,但它没有。我们甚至检查了 React 开发工具,确定状态是正确的路径,但由于某种原因,当我单击img
它时,它会将我发送到我的错误路径之一。
这就是最终的工作:
import React, { useState, useEffect } from "react";
import connectbutton from "@assets/images/stripe/ConnectedAccountsButton.png";
import { createAccountLink } from "../../services/connectedAccountsService";
import debug from "sabio-debug";
import { useHistory } from "react-router-dom";
const _logger = debug.extend("ConnectedAccountsButton");
const ConnectedAccountsButton = () => {
const [url, setUrl] = useState("");
const history = useHistory();
useEffect(() => {
createAccountLink().then(onAccountLinkSuccess).catch(onAccountLinkError);
}, []);
const redirectConnectedAccount = () => {
history.push(url);
};
const onAccountLinkSuccess = (response) => {
_logger("Success Response", response.item);
setUrl(response.item);
};
const onAccountLinkError = (err) => {
_logger("Error Response", err);
};
return (
<img
src={connectbutton}
style={{ width: "200px", cursor: "pointer" }}
alt="Connected Accounts Link"
onClick={redirectConnectedAccount}
/>
);
};
export default ConnectedAccountsButton;
推荐阅读
- javascript - 作用域和块作用域在 JavaScript 中是如何工作的?
- java - 如何在android中结束try-catch?
- jxbrowser - 使用 javaFx 从 v6 迁移到 v.7 时出现 jxBrowser 异常
- php - 发送邮件提示错误:535 Authentication Failed
- python - flask + marshmallow 架构抱怨“必填字段缺少数据”
- python - FailedPreconditionError Tensorflow 训练
- c# - WPF DataGrid 行的颜色多绑定(也)拥有 IsSelected 属性?
- reactjs - 如何在 Link 和 Route 组件中同时传递 props?
- html - 有人知道为什么 font-weight: bold; 不能在移动设备上工作?
- javascript - 来自另一个模块的 Jest 模拟函数:结果值未定义