reactjs - 状态未从其他函数中定义
问题描述
我正在尝试从 updateScoreHandler 获取 eventsData。我不明白,为什么当我输入输入时,控制台中显示未定义(初始状态)。在控制台中,它开始显示:更改未定义,之后:更改{元素:数组(2),数据:数组(2)}(正确数据)
const [eventsData, setEventsData] = useState<{
elements: JSX.Element[];
data: { id: string; home?: number; away?: number }[];
}>();
useEffect(() => {
loadEvents();
}, []);
useEffect(() => {
console.log('hook', eventsData);
}, [eventsData]);
const loadEvents = async () => {
const res = await axios.get(BACKEND_URL + '/events');
const events = res.data.map((event: MatchType) => (
<input type="number" onChange={(e) => updateScoreHandler()} />
)
setEventsData({ elements: events, data: res.data });
};
const updateScoreHandler = () => {
console.log(id, value, target, eventsData);
};
解决方案
首先,不要将 JSX 元素存储在状态中,您可能会遇到过时的范围问题或其他问题,即在将输入存储在状态时 updateScoreHandler 将 eventsData 为 undefined
尝试类似的东西 -
const loadEvents = async () => {
const res = await axios.get(BACKEND_URL + '/events');
setEvents(res.data);
};
然后
const updateScoreHandler = (event) => {
// do something with event?
};
...
return (
...
{events.map(event => (
<input type="number" onChange={(e) => updateScoreHandler(event)} />
))}
...
)
推荐阅读
- javascript - Javascript - 使用来自其他变量的输入构建变量名称
- node.js - 为什么这个 Promise 的 then 回调从未被调用?
- maven - Maven:在构建 jar 时将外部 JAR 添加到 Spring Boot 项目
- spring - XSL FO 从服务器获取图像
- list - 如何检查列表中的所有网络元素是否显示
- python - 熊猫从拆分现有列中添加列
- c - 用于滚动 H 的 GTK 应用程序
- jquery - css() 不适用于 li:before 选择器
- amazon-web-services - AWS:我想将所有数据存储在 EBS 分区上。这是一个好习惯还是应该存储在 S3 上
- excel - 重复转置公式的简单循环