说到React,我们首先想到的应该是组件。在React眼里,一切都是组件。甚至我们用来获取数据的axios也可以用组件来表示...比如我们可以这样封装""/*get、delete、head、post、put和patch-必需*/url=""/*要请求的url端点-必需*/data={}/*post数据-可选*/params={}/*queryString数据-可选*/config={}/*axios配置-可选*/debounce={200}/*请求事件之间的最小时间-可选*/debounceImmediate={true}/*在开始时发出请求或debounce的尾部-可选*/isReady={true}/*可以发出axios请求-可选*/onSuccess={(response)=>{}}/*在axios请求成功时调用-可选*/onLoading={()=>{}}/*在axios请求开始时调用-可选*/onError=(error)=>{}/*在axios请求错误时调用-可选*//>在项目中我们可以写import{AxiosProvider,Request,Get,Delete,Head,Post,Put,Patch,withAxios}from'react-axios'...render(){return(
发生了一些不好的事情:{error.message}makeRequest({params:{reload:true}})}>Retry
)}elseif(isLoading){return(Loading...
)}elseif(response!==null){return({response.data.message}makeRequest({params:{refresh:true}})}>Refresh
)}return(发出请求前的默认消息。
)}}showUserPermit...{this.state.VIP}
)}}exportdefaultshowUserPermit;/*-*/importReact,{Component}来自'react'...classshowUserVipInfoextendsComponent{constructor(props){super(props);this.state={VIP:''}}componentWillMount(){让VIP=localStorage.getItem('你_V');this.setState({VIP})}render(){return(showUserVipInfo...{this.state.VIP}
)}}exportdefaultshowUserVipInfo;刚才发现的问题可以映射到这两个组件中。根据上面的思路,我们做了一个处理importReact,{Component}from'react'module.exports=Wrap:(WrappedComponent)=>{classreComponentextendsComponent{constructor(){super();this.state={VIP:''}}componentWillMount(){让VIP=localStorage.getItem('u_V');this.setState({VIP})}render(){returnshowUserPermit{this.props.username}
)}}showUserPermit=templete(showUserPermit);exportdefaultshowUserPermit;/*--*/importReact,{Component}from'react';import{Wrap}astempletefrom'wrapWithUsername';classshowUserVipInfoextendsComponent{render(){return(showUserVipInfo{this.props.username}
)}}showUserPermit=templete(showUserPermit);导出默认showUserVipInfo;和更高阶的多个目标组件可以分布在一个组件中。举个我们项目中的例子。右上角的时间选择组件和echarts组件是两个不同身份特有的一些行为和风格。其他的完全一样,包括state和sharing方法完全一样上面的代码render(){return(