React.js 购物车的弹出模式
React.js Popup modal for shopping cart
我目前正在研究购物车,我正在尝试弄清楚如何在单击购物车图标后显示模态。我已经查看了模态的语义-ui 的文档,但是关于如何在单击某些内容时显示模态是模糊的。我正在为模态使用语义-ui class="ui模态"。
我正在考虑在图标上放置一个 onClick,但仍然对如何从那里开始感到困惑。目前,我在另一个组件中有图标,在另一个单独的组件中有购物车。我希望商品出现在应该是购物车的弹出模式中。
import React from 'react'
import { Icon } from 'semantic-ui-react';
const ShoppingCartIcon = () => {
return(
<Icon.Group size='big' className="shopping_cart_icon">
<Icon link name='shopping cart'/>
<Icon corner='top right'/>
</Icon.Group>
)
}
export default ShoppingCartIcon;
import React from 'react'
import Shirt from './Shirt';
class ShoppingCart extends React.Component {
render() {
const listShirts = this.props.shirts.map(shirt => {
return <Shirt key={shirt.id} {...shirt}/>
})
return(
<div className="ui modal">
<div className="content">
{listShirts}
</div>
</div>
)
}
}
export default ShoppingCart;
目前,我还没有将商品添加到购物车的功能。我只想专注于在单击购物车图标后显示模态
据我所知,您既没有使用 redux 也没有使用上下文 api。你正在通过道具钻孔来传递道具。
这就是您应该逐步组织代码的方式。
我们在 header.js 中渲染 cartIcon 组件。这是经典header
Header.js
import CartDropdown from "../cart-dropdown/cart-dropdown.component";
class Header extends React.Component {
constructor(props) {
super(props);
state = { hidden: true, cartItems:[]};
}
toggleHidden() {
this.setState(() => ({ hidden: !this.state.hidden }));
}
render() {
return (
<div className="header">
<Link className="logo-container" to="/">
<Logo className="logo" />
</Link>
<div className="options">
<Link className="option" to="/shop">
SHOP
</Link>
<Link to="/contact" className="option">
CONTACT
</Link>
{/* <Link></Link> */}
<CartIcon />
</div>
{hidden ? null : (
<CartDropdown
toggle={this.toggleHidden}
cartItems={this.state.cartItems}
></CartDropdown>
)}
</div>
);
}
}
你说你还没有设置 addItem 功能。当您将项目添加到 cartItems 数组时,您将在购物车中显示它们。
现在我们需要设置 cartDropdown 组件。
const CartDropdown = ({ cartItems, toggleHidden }) => (
<div className="cart-dropdown">
<div className="cart-items">
{cartItems.length ? (
cartItems.map(item => <CartItem key={item.id} item={item} />)
) : (
<span className="empty-message"> Your cart is empty </span>
)}
</div>
<CustomButton
onClick={() => {
toggleHidden();
}}
>
GO TO CHECKOUT
</CustomButton>
</div>
);
这里我们需要为 cartDropdown 添加 css。我不知道你是如何处理你的 css。 prop-types 或 scss 但这是 css 代码,因此您可以将其应用于您的项目。
css 用于 cartDropdown 组件
.cart-dropdown {
position: absolute;
width: 240px;
height: 340px;
display: flex;
flex-direction: column;
padding: 20px;
border: 1px solid black;
background-color: white;
top: 80px;
right: 0;
z-index: 5;
.cart-items {
height: 240px;
display: flex;
flex-direction: column;
overflow: scroll;
}
.empty-message {
font-size: 18px;
margin: 50px auto;
}
button {
margin-top: auto;
}
}
我目前正在研究购物车,我正在尝试弄清楚如何在单击购物车图标后显示模态。我已经查看了模态的语义-ui 的文档,但是关于如何在单击某些内容时显示模态是模糊的。我正在为模态使用语义-ui class="ui模态"。
我正在考虑在图标上放置一个 onClick,但仍然对如何从那里开始感到困惑。目前,我在另一个组件中有图标,在另一个单独的组件中有购物车。我希望商品出现在应该是购物车的弹出模式中。
import React from 'react'
import { Icon } from 'semantic-ui-react';
const ShoppingCartIcon = () => {
return(
<Icon.Group size='big' className="shopping_cart_icon">
<Icon link name='shopping cart'/>
<Icon corner='top right'/>
</Icon.Group>
)
}
export default ShoppingCartIcon;
import React from 'react'
import Shirt from './Shirt';
class ShoppingCart extends React.Component {
render() {
const listShirts = this.props.shirts.map(shirt => {
return <Shirt key={shirt.id} {...shirt}/>
})
return(
<div className="ui modal">
<div className="content">
{listShirts}
</div>
</div>
)
}
}
export default ShoppingCart;
目前,我还没有将商品添加到购物车的功能。我只想专注于在单击购物车图标后显示模态
据我所知,您既没有使用 redux 也没有使用上下文 api。你正在通过道具钻孔来传递道具。
这就是您应该逐步组织代码的方式。
我们在 header.js 中渲染 cartIcon 组件。这是经典header
Header.js
import CartDropdown from "../cart-dropdown/cart-dropdown.component";
class Header extends React.Component {
constructor(props) {
super(props);
state = { hidden: true, cartItems:[]};
}
toggleHidden() {
this.setState(() => ({ hidden: !this.state.hidden }));
}
render() {
return (
<div className="header">
<Link className="logo-container" to="/">
<Logo className="logo" />
</Link>
<div className="options">
<Link className="option" to="/shop">
SHOP
</Link>
<Link to="/contact" className="option">
CONTACT
</Link>
{/* <Link></Link> */}
<CartIcon />
</div>
{hidden ? null : (
<CartDropdown
toggle={this.toggleHidden}
cartItems={this.state.cartItems}
></CartDropdown>
)}
</div>
);
}
}
你说你还没有设置 addItem 功能。当您将项目添加到 cartItems 数组时,您将在购物车中显示它们。
现在我们需要设置 cartDropdown 组件。
const CartDropdown = ({ cartItems, toggleHidden }) => (
<div className="cart-dropdown">
<div className="cart-items">
{cartItems.length ? (
cartItems.map(item => <CartItem key={item.id} item={item} />)
) : (
<span className="empty-message"> Your cart is empty </span>
)}
</div>
<CustomButton
onClick={() => {
toggleHidden();
}}
>
GO TO CHECKOUT
</CustomButton>
</div>
);
这里我们需要为 cartDropdown 添加 css。我不知道你是如何处理你的 css。 prop-types 或 scss 但这是 css 代码,因此您可以将其应用于您的项目。
css 用于 cartDropdown 组件
.cart-dropdown {
position: absolute;
width: 240px;
height: 340px;
display: flex;
flex-direction: column;
padding: 20px;
border: 1px solid black;
background-color: white;
top: 80px;
right: 0;
z-index: 5;
.cart-items {
height: 240px;
display: flex;
flex-direction: column;
overflow: scroll;
}
.empty-message {
font-size: 18px;
margin: 50px auto;
}
button {
margin-top: auto;
}
}