• react之——render prop


    在react “从上至下的数据流原则” 背景下,常规的消息传递机制就是通过prop属性,把父级数据传递给子级,这样一种数据流通模式决定了——数据的接收方子组件要被”硬植入“进数据的数据的给予方父组件,模式如下:

    图1  传统依赖props进行数据传递的组件“硬植入”模型

    基于上述的“硬植入”模式,就形成了组件之间的强耦合,进而会在代码里写出很多这种基于“功能型”中间件——大组件里嵌特定小组件。

    那如果大组件里的数据要被多个子组件共享怎么办?如果继续“硬植入”要继续写出“功能型组件1”,“功能型组件2”。。。这种方式很显然破坏了前端功能化,让维护和扩展都变的艰难。

    render prop

    render prop的出现,让“子组件注入”变成了可能,在注入阶段进行父子组件之间的传值,从而实现了父子组件的解耦,具体参看react官网示例代码,本地demo了一下,贴上来:

    class Cat extends React.Component{
      render(){
        const mouse = this.props.mouse;
        return(
          <div>
            <img src={require("./cat.PNG")} style={{position:"absolute",left:mouse.x,top:mouse.y}} />
          </div>
        );
      }
    }
    //带有函数prop的Mouse组件———render prop的由来
    class Mouse extends React.Component{
      constructor(){
        super();
        this.state = {
          x:0,
          y:0
        };
        this.handleMouseMove = this.handleMouseMove.bind( this );
      }
      handleMouseMove( e ){
        this.setState( {
          x: e.clientX,
          y: e.clientY
        } );
      }
      render(){//用render注入的方式,可以动态渲染注入对象
        return (<div style={{height:"900px",position:"relative"}} onMouseMove={this.handleMouseMove}>
          {this.props.render( this.state )}//调用render prop(函数引用),渲染注入的子组件
        </div>);
      }
    }
    class MouseTracker extends React.Component{
      render(){
        return (<div className="customized-wrapper">
          <h1>Move the mouse around!</h1>
          <Mouse 
          render={ mouse => (//render接收一个箭头函数引用,render作为一个prop传入子级
            <Cat mouse={mouse}/>
            ) }
            />
        </div>);
      }
    }

    事实上,除了render prop之外,react组件也可以接收用户自定义的函数型属性作为注入依赖,当然也可以在父级调用该prop实现render或其他公用,用法于render类似,大家可在本地demo.

    render prop实现了什么?

    1. 为减少“硬植入”的功能型组件编写提供了解决方案,当然不能为了解耦而解耦,当某个父级只需要给一个子级传递数据时,大可不必进行这样的解耦操作

    2. 提供了一种简单的“数据共享”机制,将数据使用方注入数据的提供方,实现了一种“按需供给”的机制,一份数据支持多方共享,很nice.

    上述机制数据模型如下:

    end

    ——May stars guide your way.

    路漫漫其修远兮,吾将上下而求索。 May stars guide your way⭐⭐⭐
  • 相关阅读:
    设置共享文件夹大小
    About IConfigurationSectionHandler Interface
    zoj 1050
    SQL Server 数据库优化经验总结
    一、页面输出缓存
    [转]深入解读 ADO.NET 2.0 的十大最新特性
    ASP.NET 缓存学习
    [转]写给ASP.NET程序员:网站中的安全问题
    [转] ASP.NET 性能提升秘诀之管道与进程优化
    实战 SQL Server 2005 镜像配置
  • 原文地址:https://www.cnblogs.com/surfer/p/10768680.html
Copyright © 2020-2023  润新知