从 redux 选择器获取值 javascript

Getting value from redux selector javascript

我正在调用一个端点,该端点 return 是我的 redux 存储的对象。该对象的 redux 选择器 returns:

Coin selector:  
{zynecoin: {…}}
zynecoin: {usd: 0.214749}
[[Prototype]]: Object

这是组件:

const ChartModal = (props) => {
  const coinSelector = useSelector(selectCoin);
  let coinValuesEnt = [];
  let coinValuesVal = [];

  React.useEffect(() => {
    if (coinSelector !== undefined) {
      coinValuesEnt = Object.entries(coinSelector);
      coinValuesVal = Object.values(coinSelector);
      console.log("Coin selector: ", coinSelector);
      console.log("Object.entries: ", coinValuesEnt[0]);
      console.log("Object.values: ", coinValuesVal[0]);
    }
  }, [coinSelector]);

  const style = {
    position: "absolute",
    top: "50%",
    left: "50%",
    transform: "translate(-50%, -50%)",
    width: 400,
    bgcolor: "background.paper",
    border: "2px solid #000",
    boxShadow: 24,
    pt: 2,
    px: 4,
    pb: 3,
  };

  return (
    <Modal
      hideBackdrop
      open={props.openModal}
      onClose={props.handleModalClose}
      // aria-labelledby="child-modal-title"
      // aria-describedby="child-modal-description"
    >
      <Box sx={{ ...style, width: 300 }}>
        <h3>Coin: {props.coinText}</h3>
        <h3>
          Price: 
          {/* {JSON.stringify(coinSelector).substring(
                    JSON.stringify(coinSelector).lastIndexOf(":") + 1,
                    JSON.stringify(coinSelector).length - 2
                  )} */}
        </h3>
        <CandleStickChart />
        <Button onClick={props.handleModalClick1}>Show Full Chart</Button>
        <Button onClick={props.handleModalClick2}>Add to Portfolio</Button>
      </Box>
    </Modal>
  );
};

我尝试在我的 useEffect 中将选择器输入到 Object.values 和 Object.entries,当 useEffect 运行 3 console.logs return:

Coin selector:  {zynecoin: {…}}zynecoin: {usd: 0.214749}[[Prototype]]: Object

Object.entries:  (2) ['zynecoin', {…}] 0: "zynecoin" 1: {usd: 0.214749} length: 2
[[Prototype]]: Array(0)

Object.values:  {usd: 0.214749}usd: 0.214749[[Prototype]]: Object

我只需要 usd 键指定的数字,我尝试了各种方法,例如:

coinValuesVal[0].usd
coinValuesVal[0][0]
coinValuesEnt.usd
coinValuesEnt[1]

它们会导致 usd undefined、[0] undefined 等编译错误。我能够提取价格的唯一方法是我的 h3 标签中的注释部分,它看起来不正确方法来做到这一点。我做错了什么?

所以两部分的问题,

  • 你想要 zynecoin 的键,显然访问时只是 returns { usd: <price> }
  • 你想要所述键的值,在本例中 usd

获取对象zynecoin的keyusd,
Object.keys(coinSelector.zynecoin)[0](returns 键数组,其中只有 usd 存在。我们只需要第一个。)

要获取值,您知道它应该像
一样简单 coinSelector.zynecoin.usd

如果您因为未定义而遇到问题。没有其他办法解决它。你必须放一个三元运算符来检查 coinSelector.zynecoin 是否存在。

{
  coinSelector.zynecoin && <Price code goes here>
}

或者,如果您使用的是最新的 ES,请使用可选链接。 (但这仍然会显示空价格)

PS: useEffect 在渲染后解析。因此,如果从您的组件安装的那一刻起该选择器是未定义的,它将首先使用未定义的。您不需要为派生状态使用该挂钩。把代码放在钩子外面就行了。