[英]setting setState in react hooks
我有两个按钮在PageOne.tsx
中create signature
和Create delivery
,此时 state 是InDelivery
然后两者都是可见的。
我的观点是如何在开始时隐藏Create delivery
按钮,但是当用户单击PageTwo
中的create signature
按钮并在该页面内用户单击Submit
按钮时,该按钮将用户带回此PageOne.tsx
。
然后在这里只有Create delivery
按钮应该是可见的,如果有人使用我的代码并提供工作示例,我将不胜感激,(我是新来的)我的代码:
import React, { ReactNode, useContext, useEffect, useState } from "react";
export function PageOne(props: React.PropsWithChildren<OrderDetailsDto>) {
const [deliveredd, setDeliveredd] = useState(false);
const RedirectToSign = () => {
setDeliveredd(true);
history.push("/PageTwo/" + orderId);
};
const RedirectToDeliv = () => {
history.push("/PageThree/" + orderId);
};
const SignatureButton = () => {
if (initialRequest.type == ApiRequestStatus.Complete) {
var state = initialRequest.responsePayload.order?.state as OrderState;
if (state == OrderState.InDelivery || state == OrderState.Delivered) {
return (
<div onClick={RedirectToSign} className="Button">
create signature
</div>
);
}
}
};
const UpdateButton = () => {
if (state === OrderState.InDelivery) {
return (
<div onClick={RedirectToDeliv} className="Button">
Create delivery
</div>
);
}
}
console.log(deliveredd);
return (
<div className="orderDetails">
{UpdateButton()}
{SignatureButton()}
</div>
);
}
我的 PageTwo 会是这样的:
import React from "react";
import { Button, Form, Input } from "antd";
export function PageTwo(props: React.PropsWithChildren<CreateSignatureProps>) {
const SendSignature = (values: Values) => {
api.cargoApi
.apiCargSignaturePost(request)
.then((response) => history.push("/PageOne/" + orderId));
}
return (
<Form onFinish={SendSignature}>
<Form.Item>
<Button type="primary" htmlType="submit">
{t("signature.create")}
</Button>
</Form.Item>
</Form>
);
}
这是你可以做的。 当您从PageTwo
重定向到PageOne
时,传递一个 state 指示要隐藏哪个按钮以及要在PageOne
中显示哪个按钮。
在PageTwo
:
history.push({
pathname: "/PageOne/" + orderId,
state: { hideCreateDelivery: true, showCreateSignature: true}
})
在PageOne
中:
// to get the data from redirection
import { useLocation } from "react-router-dom";
// Inside PageOne
const location = useLocation();
// replace this
return (
<div className="orderDetails">
{location.state && location.state.hideCreateDelivery ? null: UpdateButton()}
{location.state && location.state.showCreateSignature
? SignatureButton()
: null}
</div>
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.