【发布时间】:2021-11-07 14:31:07
【问题描述】:
我正在从事电子商务项目 (MERN)。所以我得到了 Molla 电子商务 React 模板,以获得更好的 UX/UI。
在我的根函数中,我正在获取所有产品并使用 redux 存储它们,如下所示:
const updateStore = () => {
store.dispatch( getAllProducts() );
}
一切正常,直到我发现如果我第一次尝试访问产品页面(在隐身模式下使用空的本地存储)我什么也得不到,并且产品对象未定义,如果我刷新页面然后它可以工作很好。
问题是当我尝试使用空的 redux store 访问产品页面时,它不会在存储数据时等待或重新呈现。
我尝试使用useEffect() 等待产品更改重新渲染,但它不起作用。
这是我的产品页面代码:
function SingleProduct( props ) {
let productLink= props.match.params.link;
const {product} = props;
const [productLoaded,setProductLoaded] = useState(false);
useEffect( () => {
if(productLoaded){
productGallery();
document.querySelector( '.skel-pro-single' ).classList.remove( 'loaded' );
let imgLoad = imagesLoaded( ".product-main-image", { background: true } );
imgLoad.on( 'done', function ( instance, image ) {
document.querySelector( '.skel-pro-single' ).classList.add( 'loaded' );
} );
}
}, [ productLink ] )
useEffect(()=>{
if(product){
setProductLoaded(true);
}
},[product])
return (
productLoaded ?
<>
<Helmet>
<title></title>
</Helmet>
<h1 className="d-none"></h1>
<div className="main">
<div className="page-content">
<div className="container">
<div className="product-details-top skeleton-body">
<div className="row skel-pro-single">
<div className="col-md-6">
<div className="skel-product-gallery">
</div>
<MediaOne link={ productLink } />
</div>
<div className="col-md-6">
<div className="entry-summary row">
<div className="col-md-12">
<div className="entry-summary1"></div>
</div>
<div className="col-md-12">
<div className="entry-summary2"></div>
</div>
</div>
<ProductDetailOne link={ productLink } />
</div>
</div>
</div>
<DescOne link={ productLink } />
<h2 className="title text-center mb-4">You May Also Like</h2>
<RelatedProducts />
</div>
</div>
<StickyBar link={ productLink } />
<QuickView />
</div>
</>
:
<></>
)
}
function mapStateToProps( state, props ) {
return {
product: state.data.products.filter( product => product.link == props.link )[ 0 ]
}
}
export default connect(mapStateToProps)(SingleProduct);
我尝试使用 useEffect 和 productLoaded 状态等待产品更改,因为它在第一页渲染时未定义,但仍显示未定义。
【问题讨论】:
标签: reactjs redux react-redux react-hooks use-effect