React之高阶组件

迈不过友情╰ 2021-12-10 11:45 487阅读 0赞

React之高阶组件

注意:本章节运行环境在React项目构建章节之上。

文章目录

  • React之高阶组件
    • 高阶组件
    • 装饰器
    • 带参装饰器

高阶组件

  1. let Root = props => <div>{props.schoolName}</div>;如果要在Root组件进行增强,例如将Root外部再加入其它div。

    1. import React from 'react';
    2. import ReactDom from 'react-dom';
    3. let Wrapper = function (Component){
    4. function _wrapper(props){
    5. return (
    6. <div>
    7. { props.scholName}<hr />
    8. <Component />
    9. </div>
    10. );
    11. }
    12. return _wrapper;
    13. }
    14. let Root = props => <div>Root</div>;
    15. let NewComp = Wrapper(Root) //返回一个包装后的元素
    16. ReactDom.render(<NewComp scholName="xdd" />,document.getElementById("root"));
    • 在_wrapper(props)中本身就是一个无状态组件,内部包囊这一个传入的组件,可以看做增强了传入的组件。传入的组件作为返回的新组件的子组件
  2. 简化高阶组件

    1. import React from 'react';
    2. import ReactDom from 'react-dom';
    3. let Wrapper = Component => props => (
    4. <div>
    5. { props.scholName}<hr />
    6. <Component />
    7. </div>
    8. );
    9. let Root = props => <div>Root</div>;
    10. let NewComp = Wrapper(Root) //返回一个包装后的元素
    11. ReactDom.render(<NewComp scholName="xdd" />,document.getElementById("root"));

react\_011

装饰器

  • 新版ES2016中增加了装饰器的支持,因此可以使用装饰器来改造上面的代码。
  • ES 2016的装饰器只能装饰类,不能装饰函数

    import React from ‘react’;
    import ReactDom from ‘react-dom’;

    let Wrapper = Component => props => (

    1. <div>
    2. { props.scholName}<hr />
    3. <Component />
    4. </div>
    5. );
  1. @Wrapper // 等价于 A = Wrapper(A)
  2. class A extends React.Component{
  3. render(){
  4. return <div>A</div>
  5. }
  6. }
  7. ReactDom.render(<A scholName="B" />,document.getElementById("root"));

001

  • 让Toot也显示出schoolName的值

    import React from ‘react’;
    import ReactDom from ‘react-dom’;

    let Wrapper = Component => props => (

    1. <div>
    2. { props.scholName}<hr />
    3. <Component { ...props} />
    4. </div>
    5. );
  1. @Wrapper // 等价于 A = Wrapper(A)
  2. class A extends React.Component{
  3. render(){
  4. return <div>A { this.props.scholName}</div>
  5. }
  6. }
  7. ReactDom.render(<A scholName="B" />,document.getElementById("root"));

react\_013

  • 使用<Component {...props} />相当于给组件增加了属性

带参装饰器

  • 上面例子中如果想给装饰器添加其他参数,可以如下实现

    import React from ‘react’;
    import ReactDom from ‘react-dom’;

    let Wrapper = id => Component => props => (

    1. <div id = { id}>
    2. { props.scholName}<hr />
    3. <Component { ...props} />
    4. </div>
    5. );
  1. @Wrapper("xdd") // 带参装饰器
  2. class A extends React.Component{
  3. render(){
  4. return <div>A { this.props.scholName}</div>
  5. }
  6. }
  7. ReactDom.render(<A scholName="B" />,document.getElementById("root"));

002

发表评论

表情:
评论列表 (有 0 条评论,487人围观)

还没有评论,来说两句吧...

相关阅读

    相关 React-组件

    高阶组件是 React 中复用组件逻辑的一种技巧,高阶组件是一个函数,接收需要包装的组件,返回值为增强后的组件。 实现思路: 高阶组件内部创建一个类组件,在这个类组件中去提

    相关 React组件

    高阶组件(HOC)是React里的高级技术为了应对重用组件的逻辑,HOC本质上不是React API的一部分。他是从React的组合性质中显露出来的模式 具体来说,一个高阶

    相关 React组件

    一.介绍 1.说明: 高阶组件就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件。我的理解是定义一个A组件(函数),把这个A组件传入给B组件,B组件把A组件

    相关 react 组件

    高阶组件必须是一个函数,且必须返回一个组件,参数也必须接收一个组件 作用:能对传入的组件进行一些限定操作,可以使用生命周期等 ![在这里插入图片描述