代码写了好几年了,设计模式一直处于忘我的状态。大多数关于设计模式的文章都使用基于类的静态类型语言,例如Java和C++。作为前端开发人员,js是一门基于原型的动态语言。职能已成为一等公民。模式略有不同,甚至简单得不像使用设计模式,有时会引起一些混淆。下面按照“场景”-“设计模式定义”-“代码实现”-“更多场景”-“通用”的顺序进行总结。如有不妥之处,欢迎交流讨论。场景(示例代码来自极客时间课程,ReactHooks核心原理与实战)在平时的开发中肯定遇到过这样的场景:发起异步请求,显示加载状态,获取数据显示在界面上,如果发生错误,则返回错误状态的相关印象。为了操作方便,先写一个mock数据方法:constlist={page:1,per_page:6,total:12,total_pages:2,data:[{id:1,email:"george.bluth@reqres.在",first_name:"windliang",last_name:"windliang",avatar:"https://reqres.in/img/faces/1-image.jpg"},{id:2,email:"janet.weaver@reqres.in",first_name:"Janet",last_name:"Weaver",avatar:"https://reqres.in/img/faces/2-image.jpg"},{id:3,email:"艾玛。wong@reqres.in",first_name:"Emma",last_name:"Wong",avatar:"https://reqres.in/img/faces/3-image.jpg"}]};exportconstgetDataMock=()=>newPromise((resolve,reject)=>{setTimeout(()=>{resolve(list);},2000);});然后是列表组件:从“反应”导入反应;import{getDataMock}from"./mock";exportdefaultfunctionUserList(){//使用三种状态保存用户列表,加载状态和错误状态const[users,setUsers]=React.useState([]);const[加载,设置加载]=React.useState(false);const[error,setError]=React.useState(null);//定义获取用户的回调函数constfetchUsers=async()=>{setLoading(true);尝试{constres=awaitgetDataMock();//请求成功后,将用户数据放入statesetUsers(res.data);}catch(err){//如果请求失败,将错误状态放入状态setError(err);}setLoading(false);};返回(
