javascript - React 状态钩子对于不同的调用表现不同
问题描述
我正在开发一个简单的演示应用程序,它从 GitHub API 中提取一些数据并在卡片上显示个人资料信息。卡片可以通过按钮或按键进行导航。
我想确保计数器,我曾经作为道具发送到组件以显示特定信息object[count]
,符号一旦到达数组末尾,就会重置回 0,或者如果减少计数器,则向前跳到 30(数组的大小)当值为 0 时加 1,因此它将循环回到数组的末尾而不是 -1,从而导致越界错误。
此逻辑适用于屏幕按钮。另一方面,即使按钮和按键调用相同的功能,按键的行为也会有所不同。
我在这里想念什么?
function Card(){
const [count, setCount] = useState(0);
const [users, loading] = useFetch("https://api.github.com/users");
let userCount = loading ? 0 : Number(JSON.parse(JSON.stringify(users)).length);
const navigateNext = () => {
setCount(count => count === userCount - 1 ? 0 : count + 1);
}
const navigateBack = () => {
setCount(count => count === 0 ? userCount - 1 : count - 1);
}
useKey((pressedKey) => {
if (pressedKey === 39) {
navigateNext();
} else if (pressedKey === 37) {
navigateBack();
}
}, {detectKeys: [39, 37]}); // Keycodes for left and right arrow
return loading ? (
<div className="loading">
<div></div>
</div>
) : (
<div className="card animate-bottom">
<FontAwesomeIcon className="left-arrow button" icon={faAngleLeft} size="3x" onClick={navigateBack} />{" "}
<div className="content">
<Profiles users={users} count={count} />
<Repos users={users} count={count} />
</div>
<FontAwesomeIcon className="right-arrow button" icon={faAngleRight} size="3x" onClick={navigateNext} />{" "}
</div>
);
}
export default Card;
解决方案
实际上,您必须为用户添加依赖项
useKey(
pressedKey => {
if (pressedKey === 39) {
navigateNext()
} else if (pressedKey === 37) {
navigateBack(userCount)
}
},
{ detectKeys: [39, 37] },
{ dependencies: [userCount] },
)
推荐阅读
- kubernetes - 在 GCP 中获取负载均衡器的 DNS
- json - TypeError:列表索引必须是整数或切片,而不是 str JSON Scrapy
- email - Python Flask 电子邮件 405 不允许消息
- c# - 需要状态的自包含响应式扩展辅助方法
- numpy-ndarray - 切片 NumPy 3d 数组
- c# - 在 C# 中获取网络摄像头的当前状态
- javascript - 一次只有一个把手助手工作。stripTags 或截断,而不是两者?
- selenium - 使用 Selenium 抓取 Twitter 关注者
- mysql - 左外连接返回多条记录
- python - 将 Python 包安装到需要 Pip 的 Conda 环境时出现 ModuleNotFoundError 或 ImportError