react进阶系列 - 高阶组件详解四:高阶组件的嵌套使用
前面有讲到过很多页面会在初始时验证登录状态与用户角色。我们可以使用高阶组件来封装这部分验证逻辑。封装好之后我们在使用的时候就可以如下: export default withRule(Home); 但是当我们的项目中使用了路由组件 export default withRule(withRouter(Home)); 但是当这样的页面变得越来越多时,那么处理起来是非常繁琐的。因此我们需要将这样共同的逻辑进一步封装一下,便于统一处理。而这样的封装,我们需要借助
他的含义借助下面的例子来简单说明: function fn3(a) { console.log(a); return a + 20; } function fn2(a) { console.log(a); return a - 1 ; } function fn1(a) { console.log(a) } _.flowRight(fn1,fn2,fn3)(20); //输出结果依次为 20 40 39 首先,这个方法的第一层含义是第一个括号中传入的方法会从右到左依次执行。 因此就有了这样的执行结果。从20,到40,再到39。 而每一个高阶组件函数执行之后中所返回的组件,刚好可以作为下一个高阶组件的参数继续执行,而并不会影响基础组件中所获得的新能力。因此我们可以借助lodash的这个方法来封装高阶组件的嵌套。 封装方法如下: // utils/withRuleRouter.js import withRule from 'utils/withRule'; import flowRight from 'lodash/flowRight'; import { withRouter } from 'react-router'; export default function withRuleRouter(WrappedComponent) { return flowRight(withRule,withRouter)(WrappedComponent); } 这样,我们在基础组件中使用它时就很简单了。 import withRuleRouter from 'utils/withRuleRouter'; class Home extends Component { ... } export default withRuleRouter(Home); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |