当前位置: 首页 > 知识库问答 >
问题:

无法读取未定义的React JS的属性“y”

宋岳
2023-03-14

当我尝试在React的useEffect钩子中赋值变量时,我遇到了这个奇怪的错误。

未处理得拒绝(TypeError):无法读取未定义得属性“y”

下面是这个文件的代码,这是一个非常基本的文件:

import React, { useState, useEffect } from 'react';
import { makeStyles } from '@material-ui/core/styles';
import Typography from '@material-ui/core/Typography';
import Container from '@material-ui/core/Container';
import '../../node_modules/react-vis/dist/style.css';
import {XYPlot, LineSeries, VerticalGridLines, 
    HorizontalGridLines, XAxis, YAxis,
    makeWidthFlexible, MarkSeries} from 'react-vis';

const useStyles = makeStyles((theme) => ({
    root: {
      maxWidth: '100%',
      border: '2px solid black',
      'border-radius': '10px'
    },
    graphDimensions: {
        width:'100%'
    }
}));

function StockChartCard(props){
    const classes = useStyles();

    const [strokeColor, setstrokeColor] = useState('red');
    const [data, setdata] = useState([
        {x: 0, y: 8},
        {x: 1, y: 5},
        {x: 2, y: 4},
        {x: 3, y: 9},
        {x: 4, y: 1},
        {x: 5, y: 7},
        {x: 6, y: 6},
        {x: 7, y: 3},
        {x: 8, y: 2},
        {x: 9, y: 0},
        {x: 10, y: 1},
        {x: 11, y: 5},
        {x: 12, y: 4},
        {x: 13, y: 9},
        {x: 14, y: 1},
        {x: 15, y: 7},
        {x: 16, y: 6},
        {x: 17, y: 3},
        {x: 18, y: 2},
        {x: 19, y: 0},
        {x: 20, y: 1}
    ]);
    const [openBenchmarkData, setopenBenchmarkData] = useState([]);

    useEffect(() => {
        const getStockData = async () => {
    
            console.log(data[0].y);
        
            const openPrice = data[0].y;
            const currentPrice = data[-1].y;

            if(currentPrice < openPrice){
                setstrokeColor('red')
            }
            else{
                setstrokeColor('green')
            }
        
            let benchmarkSetData = [];
            data.forEach(element => {
                const xVal = element.x;
                const dataPoint = {x: xVal, y: openPrice};
                benchmarkSetData.push(dataPoint);
            });
            setopenBenchmarkData(...openBenchmarkData, benchmarkSetData);
        }
        getStockData();
    }, [])

    return (
        <Container className={classes.root}>
            {props.quoteTicker}
                {data.length > 0 && openBenchmarkData.length > 0
                ?   (
                    <XYPlot width={650} height={300}>
                        <LineSeries animation={'noWobble'} data={data} color={strokeColor} />
                        <LineSeries data={openBenchmarkData} strokeDasharray={[1,2]}/>
                    </XYPlot>
                )
                : null
                }
        </Container>
      );
}

export default StockChartCard;

它说data[0]data[-1]未定义的,但该print语句显示数组不是null并且具有我设置的值。这不是一个状态问题,因为如果我将数据设置为文件中的常量,它仍然不起作用...任何帮助都是感激的,因为这个愚蠢的错误而精神崩溃。

共有1个答案

唐博文
2023-03-14

我很确定-1不会给出数组的最后一个值,您可以做的是:

const currentPrice=data[data.length-1].y;

还可以抛出可选链接,以防止其不可用时未定义。

const currentPrice=data[data.length-1]?.y;

 类似资料:
  • 问题内容: 我正在通过教程学习reactjs并遇到此错误。那就是“无法读取未定义的属性’keys’”。我的代码非常少,因此我认为它与语言的结构有关。有谁知道这个问题和可能的解决方案? 问题答案: 编辑:奇怪的是,在我们上面的评论之后,我检查了一下它是否确实是babel核心版本,我在小提琴中使用了这个版本: 我在上面第二个切换到您的版本时得到以下信息: 使用not 并在括号中包裹多行html,如下所

  • 运行此代码时,在的第一行出现错误 TypeError:无法读取未定义的属性“array” 代码: 我试着搜索,但没有得到正确的解。

  • 问题内容: 运行此代码时,我在第一行出现错误 TypeError:无法读取未定义的属性“数组” 码: 我尝试搜索,但没有得到正确的解决方案。 问题答案: 道具类型现在是一个单独维护的库,名称为 这里是react- docs的解释:https : //reactjs.org/docs/typechecking-with- proptypes.html 您必须将它们导入为 NPM套餐

  • 有人可以解释为什么我得到一个错误,当我使用此语法 但是当我使用箭头指针语法时没有错误,如下所示 注意:在这两种情况下,我都使用过 在 内。

  • 问题内容: 我正在尝试在ReactJS中创建一个简单的TODO列表应用程序。我对React的基础知识不太清楚,所以我被困在这里。 生成每个列表后,将为其分配一个复选框。代码在没有onChange事件到Checkbox的情况下工作正常。但是,将“已检查”功能分配给它时,会产生错误。 未捕获的TypeError:无法读取未定义的属性“已检查” 提前致谢 问题答案: 您需要设置的(你可以做到这一点通过第

  • 我基本上是React的初学者。我有一个仪表板页面,其中显示了一个React表。我有一个自定义按钮,它将打开一个弹出页面,这个弹出页面有一些复选框允许我显示/隐藏那些反应列。最初,此弹出页面中的所有复选框都设置为true。当我取消选中某列时,该列将被禁用。 这是我的父组件-父页面是带有ReactTable的页面,现在有10列,而不是像图中所示的8列。 这是我的子组件--在我的子页面(显示复选框的页面

  • 我目前使用两个组件,并在这两个组件上实现了react Route。但是当我单击父组件viewall.js时,我无法从我的模拟json服务器api中获取值,这个错误显示: viewall.js