【发布时间】:2021-08-06 15:57:30
【问题描述】:
我创建了一个 Modal,它是我的路由器配置的一部分:
return (
<AppContext.Provider value={appContextValue}>
<ProductLanding getProductModalTemplate={getProductModalTemplate} />
<Switch location={isModal ? previousLocation : location}>
<Route path="/cart">
<Cart />
</Route>
<Route exact path="/product/:id">
<Modal
modalTemplate={
productModalTemplate != null ? productModalTemplate : null
}
isModal={isModal}
/>
</Route>
</Switch>
{isModal ? (
<Route exact path="/product/:id">
<Modal
modalTemplate={
productModalTemplate != null ? productModalTemplate : null
}
isModal={isModal}
/>
</Route>
) : null}
</AppContext.Provider>
我注意到当通过浏览器导航到路由http://localhost:3001/product/3时,传播模态模板的产品数组是空的,所以我添加了以下内容:
if (!products.length) {
console.log('products ', products);
return null
}
我该如何解决这个问题?
任何帮助将不胜感激!
更新:
我更新了<Switch/>
<Switch location={isModal ? previousLocation : location}>
<Route path="/cart">
<Cart />
</Route>
<Route exact path="/product/:id">
<Modal
modalTemplate={
productModalTemplate != null ? (
productModalTemplate
) : (
<div>Nothing</div>
)
}
isModal={isModal}
/>
</Route>
</Switch>
所以现在当通过浏览器栏进入路线时,div Nothing 被渲染。
我知道为什么!我拥有模板的方式是通过 ProductListing 页面中的点击进行传播:
<div className={productClasses}>
<LinkButton
to={`/product/${id}`}
onClick={() =>
handleGetProductModalTemplate(<ProductModalTemplate />)
}
>
<img className={styles.image} src={imageSrc} alt={title} />
</LinkButton>
<div className={styles.details}>
<div className={styles.text}>
<LinkButton
to={`/product/${id}`}
onClick={() =>
handleGetProductModalTemplate(<ProductModalTemplate />)
}
>
<h2 className={styles.title}>{title}</h2>{' '}
</LinkButton>
<span className={styles.price}>${finalPrice}</span>
</div>
地址栏不会渲染任何内容,因为handleGetProductModalTemplate 永远不会触发!!!那么我的朋友们,处理这个问题的最佳方法是什么?我确信方法是 React-Router。就像这条路线被击中一样......
【问题讨论】:
标签: reactjs react-router use-state