目录
简介
React Hooks 除了可以给函数式组件赋予状态和生命周期管理外,最重要的一点是可以把共用的逻辑处理代码抽离出来给不同的视图组件进行使用,它的目的和 HOC 和 Render Props 基本相同。这篇文章将以请求远程API数据为例,最后抽离出公共的数据请求的自定义 hook 以便不同的组件需要获取数据时,可以共用一套逻辑。
适用读者
本文的适用读者为:
请求数据的例子
本文的完整代码和运行示例请点击下方按钮查看:
更完善的 useRequest Hook 可以参考我的开源项目:
Github: react-request-hook-client
需求
假设我们有一个组件,需要同时加载 Posts (博客文章) 和 Todos (待办事项) 列表,每种展示5条标题,并根据加载状态显示loading
组件。首先我们看使用一般hooks的方式。
定义 States
首先我们定义需要的 states:
// PostsAndTodos.js
const [posts, setPosts] = useState([]);
const [isPostsLoading, setIsPostsLoading] = useState();
const [todos, setTodos] = useState([]);
const [isTodosLoading, setIsTodosLoading] = useState();
posts
用来保存远程加载的文章数据,isPostsLoading
保存文章数据的加载状态todos
保存待办事项,isTodosLoading
保存待办事项数据的加载状态- 这里我们定义了4个类似的状态
加载 Posts
我们使用 useEffect
来请求 posts
数据:
// PostsAndTodos.js
useEffect(() => {
const loadPosts = async () => {
setIsPostsLoading(true);
try {
let response = await fetch(