javascript - "Reduce"在使用选择器

标签 javascript reactjs redux react-redux

我的英语说得不太好,但我会尝试一下。

我已经寻找这个有一段时间了,但找不到明确的解决方案,我正在使用 React Hook 进行电子商务,并且在我的全局商店中列出了我的购物车中的产品。

我需要计算产品数量以显示总数量,如何运行我的产品列表的“.reduce”?

是否有必要创建一个useState?

我的购物车的产品列表,它有这个架构

[{
    id: 5,
    quantity: 3
},{
    id: 23,
    quantity: 1
}]

我想到了以下几种方式

选项 1:(没有 useState,它有效吗?)

import React from 'react';
import { useSelector } from 'react-redux';

const Cart = () => {
  const cart = useSelector((state) => state.myCart); // list cart
  const count = cart.reduce((total, product) => {
    return total + product.quantity;
  }, 0);

  return (
    <div>
      <span>{count}</span>
    </div>
  );
};

export default Cart;

选项 2:此选项在显示计数时有一点延迟

import React, { useState, useEffect } from 'react';
import { useSelector } from 'react-redux';

const Cart = () => {
  const cart = useSelector((state) => state.myCart); // list cart
  const [count, setCount] = useState(0) 

  useEffect(() => {

    setCount(cart.reduce((total, product) => {
        return total + product.quantity;
      }, 0));

  }, [cart])


  return (
    <div>
      <span>{count}</span>
    </div>
  );
};

export default Cart;

最好的方法是什么?

谢谢。

最佳答案

如果您只显示计数,您还可以将减少量移至选择器函数回调中。选择器允许您返回状态,但组件会使用它。

import React from "react";
import { useSelector } from "react-redux";

const cartCountSelector = state =>
  state.myCart.reduce((total, product) => {
    return total + product.quantity;
  }, 0);

const Cart = () => {
  const count = useSelector(cartCountSelector); // list cart count

  return (
    <div>
      <span>{count}</span>
    </div>
  );
};

export default Cart;

关于javascript - "Reduce"在使用选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61004286/

相关文章:

React.js:使用相同的表单进行添加和更新

javascript - 光滑 slider - 更改输入焦点事件的可拖动状态

javascript - for循环给多个变量赋值

javascript - ReactJS 问题 : () => vs function ()

javascript - React - 使用 for 循环列表中项目的 onClick(item)

javascript - typesafe-actions(createStandardAction) 不能在带有 redux 的服务器上工作

javascript - Angular 重新加载 url 但不是状态 View

javascript - (Javascript) 带有提示的函数

javascript - 我有一个虚假数据对象,我想复制它,我该怎么做?

javascript - Animated.Component/createAnimatedComponent(Component) 与 Component 有何不同?