【问题标题】:React/Redux Ecommerce State management design question?React/Redux 电子商务状态管理设计问题?
【发布时间】:2021-11-06 12:52:07
【问题描述】:

我正在关注 React/Redux MERN 教程,并且讨论过教程中的添加到购物车功能过于复杂或不正确。

了解 React 正确设计和状态管理的人能否告诉我每种方法的优缺点?

方法一:在产品界面点击“加入购物车”。产品 ID/数量将传递给您的操作创建者,reducer 将根据 ID 和数量存储产品信息。 访问 domain.com/cart 时,cartScreen 将根据 cartReducer 状态填充购物车。

const addToCartHandler = () => {
        dispatch(addToCart(product._id, qty))
        props.history.push('/cart')
    }

方法2:(这是教程方法)在产品屏幕上点击“加入购物车”。 AddtoCartHandler 重定向到 domain.com/cart/ID?qty=1 cartScreen 组件具有 useEffect 它将调度购物车操作创建者并从 URL 参数中提取 ID/Qty。

    const productId = match.params.id
    const qty = location.search ? Number( location.search.split('=')[1]) : 1
     
    useEffect(() => {
    if(productId){
     dispatch(addToCart(productId, qty))
    }
    }, [dispatch, productId, qty])

学生的抱怨是方法2过于复杂和破碎。 一位学生评论“当您将商品添加到购物车时,您无法更改该商品的数量。原因是我们从查询参数中获取数量值(数量)。因此,如果您尝试更改值并刷新页面, useEffect 函数将使用 productId 和 qty 值将产品数量重置为最初添加到购物车的数量。

为什么要这样?为什么不直接在用户单击 Add To Cart 按钮时调度 addToCart 并在 CartScreen 中显示购物车状态中的任何内容?使用查询字符串只会使其过于复杂且容易出错。”

作为初学者,我不确定为什么方法 1 或 2 会比另一种更好,以及在哪种情况下更好。在我看讲座之前,我试着想着自己做,写了伪代码。我做到了方法 1。当讲师开始使用 URL 参数进行调度时,我认为如果您必须以某种方式跟踪 URL 和 URL 历史记录可能会更好?

想法?

【问题讨论】:

    标签: reactjs redux react-state-management


    【解决方案1】:

    这两种方法都可以。第一种方法比第二种方法更干净。我想,最有可能的是,本教程正在使用他们获得的 URL 做一些事情。不确定是什么,但您在 URL 中公开了产品 ID 和数量。在访问第三方支付站点或向该站点提供值后,URL 可用作返回 URL。

    【讨论】:

    • 谢谢。我还没有走那么远,但是从查看内容来看,它看起来像结帐页面以及登录和其他页面查看 URL 参数以显示或不显示某些内容。例如,本教程有一个结帐按钮,该按钮重定向到“/login?redirect=shipping”,如果他们已登录,它将显示运输表格。如果没有,它将进入登录表单。一般来说,对所有内容都使用 URL 参数是一种好习惯吗?或者我们不能通过组件和全局 redux 状态来完成这一切吗? IE登录状态为真,然后转到某个页面?
    • 如果您在将东西添加到购物车后注销,如果您的注销清除了 redux 存储,然后登录后如果您需要查看您的购物车,则这些值必须在某个地方。可能是因为他们将其保留在 URL 中。但是如果有多种产品并且购物车中的每个数量都不同怎么办?在这种情况下,URL 方法毫无意义。
    • 您可以根据您的 cmets 将东西添加到购物车并玩耍,直到您在没有登录的情况下结帐。在那种情况下,不确定他们为什么要使用 URL 参数。可能只是为了展示如何从路由和查询字符串中提取数据。
    • 谢谢你说得有道理。随着课程的进行,我会保持开放的心态,但对于这个 addToCart 函数来说,url 参数似乎是不必要的
    猜你喜欢
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2019-09-12
    • 2020-05-13
    • 2021-01-26
    • 1970-01-01
    • 2018-09-13
    • 2018-03-05
    相关资源
    最近更新 更多