Javascript 学习反应-参考错误
从今天开始学习react,我遇到了一个可能比react更与JS相关的问题Javascript 学习反应-参考错误,javascript,reactjs,Javascript,Reactjs,从今天开始学习react,我遇到了一个可能比react更与JS相关的问题 import React, { useState } from "react"; import Counter from "./counter"; function Counters() { const [counters, setCounters] = useState([ { id: 1, value: 4 }, { id: 2, value: 0 },
import React, { useState } from "react";
import Counter from "./counter";
function Counters() {
const [counters, setCounters] = useState([
{ id: 1, value: 4 },
{ id: 2, value: 0 },
{ id: 3, value: 0 },
{ id: 4, value: 0 },
]);
const handleDelete = (counterID) => {
setCounters(counters.filter((counter) => counter.id !== counterID));
};
const handleIncrement = (counterToBeUpdated) => {
console.log(counters);
const counters = [...counters];
const index = counters.indexOf(counterToBeUpdated);
counters[index] = { ...counterToBeUpdated };
counters[index].value++;
setCounters({ counters });
};
return (
<div>
{counters.map((counter) => (
<Counter
key={counter.id}
counter={counter}
onDelete={handleDelete}
onIncrement={handleIncrement}
/>
))}
</div>
);
}
export default Counters;
当子组件调用handleIncrement时,我得到一个引用错误,即在初始化计数器之前尝试访问计数器。这是因为您试图从外部作用域使用一个同名的变量: 常量计数器=[…计数器] 常量计数器=[1,2,3]; 功能更新{ 常量计数器=[…计数器]; } 使现代化
//=>未捕获引用错误:无法在初始化之前访问“计数器”这是因为您试图使用外部作用域中具有相同名称的变量: 常量计数器=[…计数器] 常量计数器=[1,2,3]; 功能更新{ 常量计数器=[…计数器]; } 使现代化
//=>未捕获引用错误:无法在初始化之前访问“计数器”我认为这里的主要问题是如何调用handleIncrement。 它在没有参数的情况下被调用,这意味着countertoUpdated将是未定义的 如果您将onIncrement={handleIncrement}更改为onIncrement={=>handleIncrementcounter.id},这就完成了一半 您使用的计数器的手内增量。indexOfcounterToBeUpdated。返回作为参数传递的值的数组位置。因为您正在寻找一个对象,并且对象相等性是javascript中的一个重要特性,所以我建议您最好使用Array.find here 这就是在数组中查找对象的方式
const counterToBeUpdated = counters.find((counter) => counter.id === counterToBeUpdated);
由于此方法仍有许多工作要做,请使用计数器创建新数组,将此数组设置为状态,我将使用array.map向您显示一个快捷方式:
Array.map返回一个新数组。您传递的函数将针对数组中的每个值执行,您可以决定新数组中的适当值的外观。我认为这里的主要问题是如何调用handleIncrement。 它在没有参数的情况下被调用,这意味着countertoUpdated将是未定义的 如果您将onIncrement={handleIncrement}更改为onIncrement={=>handleIncrementcounter.id},这就完成了一半 您使用的计数器的手内增量。indexOfcounterToBeUpdated。返回作为参数传递的值的数组位置。因为您正在寻找一个对象,并且对象相等性是javascript中的一个重要特性,所以我建议您最好使用Array.find here 这就是在数组中查找对象的方式
const counterToBeUpdated = counters.find((counter) => counter.id === counterToBeUpdated);
由于此方法仍有许多工作要做,请使用计数器创建新数组,将此数组设置为状态,我将使用array.map向您显示一个快捷方式:
Array.map返回一个新数组。您传递的函数将对数组中的每个值执行,您将决定新数组中的适当值的外观。您有一些错误:此行setCounters{counters};是错误的,计数器是数组,但您正在将其更改为对象。至于引用错误,您在handleIncrement函数中分配了一个局部变量,该变量会遮挡外部状态,但在分配之前您会尝试记录它。这是否回答了您的问题?到处都有计数器:const counters=[…counters];。是否要分散外部作用域中的计数器并将其分配给相同的变量名?有几个错误:此行setCounters{counters};是错误的,计数器是数组,但您正在将其更改为对象。至于引用错误,您在handleIncrement函数中分配了一个局部变量,该变量会遮挡外部状态,但在分配之前您会尝试记录它。这是否回答了您的问题?到处都有计数器:const counters=[…counters];。是否要从外部作用域分散计数器并将其分配给相同的变量名?