reactjs - 单击提交按钮时反应显示错误
问题描述
我是 React 的新手。我不明白为什么它显示错误。我需要重复数组对象,但是当它到达最后一个数组时,它不会重新启动。
https://codesandbox.io/s/generate-quote-xpu1q
index.js:
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
const rootElement = document.getElementById("root");
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
rootElement
);
应用程序.js:
import React, { useState, useEffect } from "react";
import "./styles.css";
// import { qutoes } from "./Fetch";
export default function App() {
// const data = qutoes;
const [data, setData] = useState("loading");
const [index, setIndex] = useState(0);
const qutoesBtn = () => {
if (index === data.length - 1) {
setIndex(0);
} else {
setIndex(index + 1);
}
};
useEffect(() => {
fetch("https://type.fit/api/quotes")
.then(res => res.json())
.then(res2 => {
console.log(res2.slice(0, 10));
const lists = res2.slice(0, 10);
setData(lists);
});
}, []);
return (
<div className="App">
<h1>Generate Quote</h1>
<h4>
{data === "loading" ? (
"loading...!!"
) : (
<div>
My qutoes is ---- <br />
<span> {data[index].text}</span> <br /> Author is --
{data[index].author}
</div>
)}
</h4>
<button onClick={qutoesBtn}>Generate Quote</button>
</div>
);
}
解决方案
一旦索引达到,您应该更改条件以更新data.length - 1
if (index === (data.length - 1)) {
setIndex(0);
}
请记住,给定数组[1, 2, 3]
的长度为3
,但最大索引是2
因为数组索引从 开始0
,因此当索引等于 data.length 时,React 将尝试访问该位置,从而给您遇到错误。
推荐阅读
- java - 在多个类中共享公共属性的最佳方式是什么?
- c++ - 将存储在向量中的二进制数据读入结构
- javascript - 如何在反应js中的函数中重置间隔并使用间隔调用api
- swift - CoreML 图像检测
- python - 从图像中提取表格数据
- c++ - 尽管实现看起来正确,但在 DP 问题中得到错误答案
- javascript - 使用 React Native 中的 if 语句从 Firebase 接收特定数据
- php - Laravel 从两个表中获取数据而不使用分页连接
- kubernetes - 在 Minikube 服务器(1.6.2)上安装 helm 2.13.0 找不到分蘖
- hyper-v - 尝试进入“虚拟交换机管理器”时调用错误