React 组件在空时和从服务器加载时收缩
React components shrinking when empty and when loading from the server
所以我在 React 中建立了一家商店,我面临的问题是,当 Shop 组件加载数据时,当 Cart 组件为空时,组件会收缩并且不会保持其“宽度:100%”属性
我认为问题是在我将组件从 class 转换为 Hooks 时开始的,但我不确定问题出在哪里。
我的问题:
如何解决这个问题并使我的组件不收缩?
应该添加或删除什么?
如果您知道问题出在哪里,我会很乐意学习。
这是他们俩的 css 代码 :
.cart_container{
display: flex;
width: 100%;
min-height: 20rem;
background-color: burlywood;
flex-direction: column;
}
.shopItem_container{
display: flex;
justify-content: flex-start;
align-items: center;
margin: 0;
padding: 0;
width: 100%;
list-style-type: none;
flex-wrap: wrap;
}
我将添加购物车组件,以便您参考
import React, { useRef } from 'react';
import './cart.css'
import { useIntersection } from 'react-use';
import formatCurrency from '../../../util'
import { Fade } from "react-awesome-reveal";
export default function Cart (props) {
const { cartItems } = props;
return (
<div className="container">
<div className="cart_container" >
{cartItems.length === 0 ? (
<div className="cart cart_header">
Cart Is Empty
</div>
) : (
<div className="cart cart_header">
You Have {cartItems.length} Itames In The Cart{""}
</div>
)}
<div >
<div className="cart">
<Fade direction="up" triggerOnce cascade duration="750">
<ul className="cart_items">
{cartItems.map((item , index ) => (
<li key={index}>
<div className="cart_image">
<img src={item.image} alt={item.name}></img>
</div>
<div className="ShopItem_details_discription">
<div className="productInfo_Container">
<div> LOGO </div>
<div className="productInfo">
<h2>{item.name}</h2>
<p>{item.info}</p>
</div>
<div >
<p> Phone Number</p>
<div className="flourType_Container" >
{item.flourType.map((x)=>(
<div>{" "}{x}</div>
))}
</div>
</div>
</div>
</div>
<div className="cart_mengment">
{formatCurrency(item.price)}
<button onClick={() => props.addAmount(item)} className = "Btn" > + </button>
<button onClick={() => props.subAmount(item, index)} className = "Btn" > - </button>
<div className = "ItemCounte"> {item.count}</div>
<button onClick={() => props.removeFromCart(index)}>
Remove
</button>
</div>
</li>
))}
</ul>
</Fade>
</div>
</div>
</div>
</div>
)
}
这个问题发生在我开始编码和学习的时候,实际上你的代码运行正常,它遵循width: 100%
语句,你需要仔细观察你会发现你写了width: 100%
而不是 width: 100vw
,所以 css 实际上占用了 div 的宽度,当没有数据时 div 会自动缩小到1px 左右,记住我说的是 1px 而不是 1%,那是因为 1px 实际上被 css 认为是 100% 宽度,因为那是 div 的全尺寸,所以你的 css 遵循该宽度作为其总宽度的 100% 并呈现缩小的 div 但是当内容加载时,div 实际上变大,被内容和 div 的大小填充增加到可以说 100px,现在 div 的总 100% 宽度是 100px 所以现在 width:100%
将呈现 100px div.
针对此问题的最佳 react.js 解决方案是在加载数据时使用占位符,当数据加载完成后,您只需将占位符替换为您的实际内容即可。
Semantic UI has the perfect example,但制作占位符并不复杂,您可以自己制作一个简单的 css 和 html
所以我在 React 中建立了一家商店,我面临的问题是,当 Shop 组件加载数据时,当 Cart 组件为空时,组件会收缩并且不会保持其“宽度:100%”属性
我认为问题是在我将组件从 class 转换为 Hooks 时开始的,但我不确定问题出在哪里。
我的问题:
如何解决这个问题并使我的组件不收缩?
应该添加或删除什么?
如果您知道问题出在哪里,我会很乐意学习。
这是他们俩的 css 代码 :
.cart_container{
display: flex;
width: 100%;
min-height: 20rem;
background-color: burlywood;
flex-direction: column;
}
.shopItem_container{
display: flex;
justify-content: flex-start;
align-items: center;
margin: 0;
padding: 0;
width: 100%;
list-style-type: none;
flex-wrap: wrap;
}
我将添加购物车组件,以便您参考
import React, { useRef } from 'react';
import './cart.css'
import { useIntersection } from 'react-use';
import formatCurrency from '../../../util'
import { Fade } from "react-awesome-reveal";
export default function Cart (props) {
const { cartItems } = props;
return (
<div className="container">
<div className="cart_container" >
{cartItems.length === 0 ? (
<div className="cart cart_header">
Cart Is Empty
</div>
) : (
<div className="cart cart_header">
You Have {cartItems.length} Itames In The Cart{""}
</div>
)}
<div >
<div className="cart">
<Fade direction="up" triggerOnce cascade duration="750">
<ul className="cart_items">
{cartItems.map((item , index ) => (
<li key={index}>
<div className="cart_image">
<img src={item.image} alt={item.name}></img>
</div>
<div className="ShopItem_details_discription">
<div className="productInfo_Container">
<div> LOGO </div>
<div className="productInfo">
<h2>{item.name}</h2>
<p>{item.info}</p>
</div>
<div >
<p> Phone Number</p>
<div className="flourType_Container" >
{item.flourType.map((x)=>(
<div>{" "}{x}</div>
))}
</div>
</div>
</div>
</div>
<div className="cart_mengment">
{formatCurrency(item.price)}
<button onClick={() => props.addAmount(item)} className = "Btn" > + </button>
<button onClick={() => props.subAmount(item, index)} className = "Btn" > - </button>
<div className = "ItemCounte"> {item.count}</div>
<button onClick={() => props.removeFromCart(index)}>
Remove
</button>
</div>
</li>
))}
</ul>
</Fade>
</div>
</div>
</div>
</div>
)
}
这个问题发生在我开始编码和学习的时候,实际上你的代码运行正常,它遵循width: 100%
语句,你需要仔细观察你会发现你写了width: 100%
而不是 width: 100vw
,所以 css 实际上占用了 div 的宽度,当没有数据时 div 会自动缩小到1px 左右,记住我说的是 1px 而不是 1%,那是因为 1px 实际上被 css 认为是 100% 宽度,因为那是 div 的全尺寸,所以你的 css 遵循该宽度作为其总宽度的 100% 并呈现缩小的 div 但是当内容加载时,div 实际上变大,被内容和 div 的大小填充增加到可以说 100px,现在 div 的总 100% 宽度是 100px 所以现在 width:100%
将呈现 100px div.
针对此问题的最佳 react.js 解决方案是在加载数据时使用占位符,当数据加载完成后,您只需将占位符替换为您的实际内容即可。
Semantic UI has the perfect example,但制作占位符并不复杂,您可以自己制作一个简单的 css 和 html