【发布时间】:2020-04-21 08:59:21
【问题描述】:
由于某种原因,我似乎无法理解这个错误;
我已经查看了回调,包括useEffect 中的代码,但它对我不起作用(或者我做错了)。
代码如下:
import React, { useEffect, useState } from "react";
import "../css/main.css";
import Node from "./node";
const Pathfinder = () => {
const START_NODE_ROW = 10;
const START_NODE_COL = 15;
const FINISH_NODE_ROW = 10;
const FINISH_NODE_COL = 35;
useEffect(() => {
getGrid();
}, []);
const [grid, setGrid] = useState([]);
const getGrid = () => {
setGrid(getInitGrid());
};
const getInitGrid = () => {
const grid = [];
for (let row = 0; row < 20; row++) {
const currentRow = [];
for (let col = 0; col < 50; col++) {
currentRow.push(createNode(col, row));
}
grid.push(currentRow);
}
return grid;
};
const createNode = (col, row) => {
return {
col,
row,
isStart: row === START_NODE_ROW && col === START_NODE_COL,
isFinish: row === FINISH_NODE_ROW && col === FINISH_NODE_COL,
distance: Infinity,
isVisited: false,
isWall: false,
previousNode: null
};
};
return (
<main id="Pathfinder">
{grid.map((row, rowIdx) => {
return (
<div key={rowIdx}>
{row.map((node, nodeIdx) => {
const { row, col, isFinish, isStart } = node;
return (
<Node
key={nodeIdx}
col={col}
isFinish={isFinish}
isStart={isStart}
row={row}
></Node>
);
})}
</div>
);
})}
</main>
);
};
export default Pathfinder;
我基本上是在制作节点组件的网格;
我必须使用useEffect,因为我试图只使用箭头函数和钩子,而没有类/反应组件,这就是为什么我不能使用像componentWillMount 这样的东西。
【问题讨论】:
-
试着把useeffect放在你的
setGrid函数下面 -
getGrid对于调用setGrid的函数来说,是一个真的令人困惑的名称。也许setInitialGrid?
标签: javascript reactjs dependencies react-hooks use-effect