简体   繁体   English

React js错误:无法读取未定义的属性'0'

[英]React js error : Cannot read property '0' of undefined

this line is giving me an error {gridValues[props.gridIndex]} .这条线给了我一个错误{gridValues[props.gridIndex]} The goal I'm trying to achieve is that my gridValues array should be displayed on my screen for a specific index.我试图实现的目标是我的 gridValues 数组应该显示在我的屏幕上以获取特定索引。 After onClick the value should change to either 'X' or 'O' depending on the situation.在 onClick 之后,该值应根据情况更改为“X”或“O”。 Basically this is tic tac toe X and O render between two players.基本上这是两个玩家之间的 tic tac toe X 和 O 渲染。

import React, { useState } from "react";
import "./Box.css";

function Box(props) {
  const [gridValues, setGridValue] = useState([
    " ",
    " ",
    " ",
    " ",
    " ",
    " ",
    " ",
    " ",
    " "
  ]);
  const [symbol, setSymbol] = useState("X");

  function handleClick(index) {
   console.log('here')
    if (gridValues[index] === " ") {
      setGridValue((prevValues) => {
        for (var i = 0; i < prevValues.length; i++) {
          if (i === index) {
            prevValues[i] = symbol;
          }
        }
      });
      if (symbol === "X") {
        setSymbol("O");
      } else {
        setSymbol("X");
      }
    }
  }

  return (
    <div
      key={props.gridIndex}
      onClick={() => handleClick(props.gridIndex)}
      className="box"
    >
      {gridValues[props.gridIndex]}
    </div>
  );
}
export default Box;

Your updater function must have a return value.您的更新程序 function 必须有返回值。 If you don't return an array, gridValues will be set to undefined .如果您不返回数组,则 gridValues 将设置为undefined

 setGridValue((prevValues) => {
    const newValues = prevValues.slice()
    newValues[index] = symbol
    return newValues
 })

your function setGridvalue have to return a new array, you cant change direct to prevValues您的 function setGridvalue 必须返回一个新数组,您不能直接更改为 prevValues

setGridValue((prevValues) => {
        for (var i = 0; i < prevValues.length; i++) {
          if (i === index) {
            prevValues[i] = symbol;
          }
        }
      });

to

setGridValue((prevValues) => {
   let newArr = [...prevValues]
   newArr[index] = symbol;
   return newArr;
})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM