- 自定义hook的作用在于提取公共逻辑,所以一般不会返回一个JSX对象,而是会根据需要返回特定的数据或者方法
-
用法
封装好一个组件,然后把读和写接口暴露出去就可以了 ```javascript import { useState, useEffect } from “react”;
const useList = () => { const [list, setList] = useState(null); useEffect(() => { ajax(“/list”).then(list => { setList(list); }); }, []); // [] 确保只在第一次运行
return { //这个地方直接把读和写暴露出去就可以了 list: list, setList: setList }; }; export default useList;
function ajax() { return new Promise((resolve, reject) => { setTimeout(() => { resolve([ { id: 1, name: “Frank” }, { id: 2, name: “Jack” }, { id: 3, name: “Alice” }, { id: 4, name: “Bob” } ]); }, 2000); }); }
- 直接使用这个暴露出来的Hook 就可以了```javascriptimport React, { useRef, useState, useEffect } from "react";import ReactDOM from "react-dom";import useList from "./hooks/useList";function App() {const { list, setList } = useList(); //直接使用这个封装好的 Hook 就可以了//这个 list 就是 封装Hook里面的listreturn (<div className="App"><h1>List</h1>{list ? (<ol>{list.map(item => (<li key={item.id}>{item.name}</li>))}</ol>) : ("加载中...")}</div>);}const rootElement = document.getElementById("root");ReactDOM.render(<App />, rootElement);
