关闭按钮不适用于react-bootstrap模式组件
我正在尝试使用react-bootstrap模态和react状态显示另一个组件.我正在遵循react-bootstrap模态代码,并尝试以自己的方式自定义状态.我无需使用React.useStae就可以创建状态来打开模态.但是问题是当我单击关闭按钮时,模态没有关闭.那么,我该如何解决状态问题呢?
I'm trying to show another component using the react-bootstrap modal and react state. I'm following a react-bootstrap modal code and trying to customize the state my own way. I am able to create the state to open the modal without using React.useStae. But the problem is the modal isn't closing when I click the close button. So, How can I fixe this problem with the state?
这是我正在关注的react-bootstrap模式代码:
This is the react-bootstrap modal code that I'm following:
这是我的代码,我试图在模式中打开另一个组件.但是关闭btn无效:
and this is my code where I'm trying to open another component inside the modal. but the close btn is not working:
import React, { Component, useState } from "react";
import { Link } from "react-router-dom";
//COMPONENTS
import { Container, Row, Col, Modal, Button } from "react-bootstrap";
import FeatureCard from "../../widgets/ShoppingCards/FeatureCard/FeatureCard";
import AllDressHeader from "../../widgets/AllDressHeader/AllDressHeader";
import ProductCard from "../../widgets/ShoppingCards/ProductCard/ProductCard";
import Slider from "react-slick";
//Images
import ShirtHeader from "../../../assets/Shirts/header-new.jpg";
import img from "../../../assets/Shirts/A-unsplash.jpg";
import img2 from "../../../assets/Shirts/ocean-shirt.jpg";
import img3 from "../../../assets/Shirts/L-unsplash.jpg";
import img4 from "../../../assets/Shirts/denim.jpg";
import img5 from "../../../assets/Shirts/R-unsplash.jpg";
import img6 from "../../../assets/Shirts/P-denim.jpg";
import img7 from "../../../assets/Shirts/Q-unsplash.jpg";
import img8 from "../../../assets/Shirts/Y-unsplash.jpg";
import img9 from "../../../assets/Shirts/Mens-Popover.jpg";
import img10 from "../../../assets/Shirts/blur-shirt.jpg";
import shirts from "../../../assets/Shirts/A-unsplash.jpg";
class Shirts extends Component {
state = {
whichComponentToShow: "FeatureCard",
show: false,
setShow: false,
};
onClick = () => {
this.setState({ whichComponentToShow: "ProductCard", show: true });
};
handleClose = () => {this.setState({setShow:false})};
handleShow = () =>{this.setState({setShow:true})};
render() {
const featureCard = (
<FeatureCard
OnClick={this.onClick}
image={img}
title="Sky Blue"
price="9$"
/>
);
const productCard = (
<ProductCard image={shirts} title="Sky Blue" price="9$" add="shirt" />
);
//WHICH COMPONENT TO SHOW
const ShowComponent = () => {
if (this.state.whichComponentToShow === "FeatureCard") {
return <div>{featureCard}</div>;
} else if (this.state.whichComponentToShow === "ProductCard") {
return (
<div>
<Modal
show={this.state.show}
onHide={this.handleClose}
centered
size="xl"
>
<Modal.Header closeButton></Modal.Header>
<Modal.Body>
<Container fluid>
<Row>
<Col lg={12}> {productCard}</Col>
</Row>
</Container>
</Modal.Body>
<Modal.Footer>
<Button variant="secondary" onClick={this.handleClose}>
Close
</Button>
</Modal.Footer>
</Modal>
</div>
);
}
};
return (
<div className="Shirts" style={{ margin: "3rem 0rem" }}>
<div>
<AllDressHeader
Image={ShirtHeader}
h1="SHIRTS FOR MEN"
para="Id adipisicing elit adipisicing Lorem. Laborum deserunt laboris ex aliqua deserunt ipsum irure culpa pariatur in esse esse quis. Laboris incididunt enim velit reprehenderit irure. Do est deserunt sint."
h2="CHOOSE YOUR FAVOURITE SHIRT NOW"
/>
</div>
<Container>
<Row>
<div>{ShowComponent()}</div>
<Col>
<FeatureCard image={img2} title="Beach Light" price="25.50$" />
</Col>
<Col>
<div>
<FeatureCard
image={img3}
title="Official Formal"
price="9.99$"
/>
</div>
</Col>
<Col>
<div>
<FeatureCard image={img4} title="Denim" price="19$" />
</div>
</Col>
</Row>
<Row>
<Col>
<div>
<FeatureCard image={img5} title="Red Black" price="12$" />
</div>
</Col>
<Col>
<div>
<FeatureCard
image={img6}
title="Blue White Denim"
price="56$"
/>
</div>
</Col>
<Col>
<div>
<FeatureCard
image={img7}
title="White Long Sleeve"
price="8$"
/>
</div>
</Col>
<Col>
<div>
<FeatureCard image={img8} title="Blue Dotted" price="9.50$" />
</div>
</Col>
</Row>
</Container>
</div>
);
}
}
export default Shirts;
您的模式引用了this.state.show,但是您的handleCLose/Show函数正在设置this.state.setShow.
your modal references this.state.show, but your handleCLose/Show functions are setting this.state.setShow.
相反,您应该设置显示"
instead you should set "show"
handleClose = () => {this.setState({show:false})};
handleShow = () =>{this.setState({show:true})};
您正在查看的示例是一个功能组件,其中setShow是useState挂钩的一种变异方法.您正在使用classBased组件,该组件使用setState来改变其状态.
the example you are looking at is a functional component, where setShow is a mutation method for a useState hook. You are working with a classBased component, which uses setState for mutating its state.