javascript - 反应 useFetch 钩子 + onclick / 事件
问题描述
我有一个自定义的可重用钩子来进行我创建的 http 调用,我在我的组件中使用它,如下所示:
const { data, error, isLoading, executeFetch } = useHttp<IArticle[]>('news', []);
在同一个组件中,我可以选择切换复选框。当复选框被切换时,我想执行另一个 API 调用:
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
useHttp('news');
};
return (
<>
<div className={classes.articleListHeader}>
<h1>Article List</h1>
<small className={classes.headerSubtitle}>{data.length} Articles</small>
</div>
<ul>
{data.map(article => <Article article={article} handleChange={handleChange}/>)}
</ul>
</>
)
但是由于钩子的行为,我不能直接在反应函数组件之外运行钩子。
什么是解决方案/最佳实践?
解决方案
你不应该使用这样的钩子。它们应该始终位于顶层,并且可能仅在依赖关系发生变化时才被调用/重新计算(例如传递的 API 调用参数)。但是,我可以看到你已经executeFetch
从钩子里回来了。你就不能这么叫吗?所以
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
executeFetch();
};
推荐阅读
- c# - 向 JWT Token 验证添加自定义函数
- mysql - 在现有列之后添加新列并使用一条语句 DROP 现有列 MYSQL
- java - 获取 Timestamp.valueOf 的不同值
- flutter - Flutter 无法导入库
- ios - 如果设置子视图的隐藏属性,如何知道 UIStackView 已完成自动布局
- kotlin - 将字符串转换为字节时出现 NumberFormatException
- excel - 如何查询一个月的工作日数?
- java - 无法发送 Https 请求(在 SSLv3 中运行 Tomcat 8.5)
- react-native - 重复的模块名称:create-react-context。跨不同文件的同名声明
- mysql - 如何在我的 phpmyadmin 中自动保存对备份数据库的更改?