当前位置: 首页 > news >正文

对比色网站设计深圳龙岗区网站建设

对比色网站设计,深圳龙岗区网站建设,金华企业做网站,网站建设验收报告模板目录 1,问题描述2,解决方式2.1,Render Props2.2,HOC 3,使用场景 1,问题描述 当使用组件时,标签中的内容,会被当做 props.children 来渲染: 子组件: import…

目录

  • 1,问题描述
  • 2,解决方式
    • 2.1,Render Props
    • 2.2,HOC
  • 3,使用场景

1,问题描述

当使用组件时,标签中的内容,会被当做 props.children 来渲染:

子组件:

import React, { PureComponent } from "react";export default class MyComponent extends PureComponent {state = {x: 0,y: 0,};render() {return <div>{this.props.children}</div>;}
}

父组件使用:

import React from "react";
import MyComponent from "./MyComponent";export default function index() {return (<div><MyComponent><h2>1次使用</h2></MyComponent><MyComponent><h2>2次使用</h2></MyComponent></div>);
}

现在的需求:父组件中如何使用子组件的状态?

2,解决方式

2.1,Render Props

注意到在子组件中默认渲染的是 props.children,那如果像上下文 <ctx.Consumer></ctx.Consumer> 一样,通过函数参数来传递指定内容,就可以解决了。

所以,props.children 变成函数即可

import React, { PureComponent } from "react";export default class MyComponent extends PureComponent {state = {x: 1,y: 2,};render() {return <div>{this.props.children(this.state)}</div>;}
}

使用

import React from "react";
import MyComponent from "./MyComponent";export default function index() {return (<div><MyComponent>{(childrenState) => <h2>{childrenState.x}</h2>}</MyComponent><MyComponent>{(childrenState) => <h2>{childrenState.y}</h2>}</MyComponent></div>);
}

另外,一般这种情况不会用 props.children,而是使用约定俗成的 props.render 来表示。

// 子组件
<div>{this.props.render(this.state)}</div>;// 父组件
<MyComponent render={(childrenState) => <h2>{childrenState.x}</h2>} />

注意,因为子组件 extends PureComponent,所以父组件应该将这个函数单独声明才行,否则每次都会重新渲染。(具体原因看这篇文章)

修改父组件如下:

import React from "react";
import MyComponent from "./MyComponent";const renderA = (childrenState) => <h2>{childrenState.x}</h2>;export default function index() {return (<div><MyComponent render={renderA}></MyComponent></div>);
}

2.2,HOC

高阶组件也能解决这个问题,但相比 Render props 有点繁琐。

import React, { PureComponent } from "react";export default function withState(Comp) {return class MyComponent extends PureComponent {state = {x: 1,y: 2,};render() {return <Comp {...this.props} x={this.state.x} />;}};
}

父组件使用

import React from "react";
import withState from "./withState";function ChildA(props) {return <h2>{props.x}</h2>;
}const ChildStateA = withState(ChildA);export default function index() {return (<div><ChildStateA /></div>);
}

3,使用场景

可以看到,效果类似 vue中作用域插槽 。

所以大多的使用场景:某些组件的各个功能和处理逻辑相同,只是渲染的UI不同


以上。

http://www.yayakq.cn/news/529863/

相关文章:

  • 站群网站推广工具费用北京包装设计公司排名
  • 成都建设门户网站高端玩家
  • 阿里企业网站托管网上商城网站建设意义
  • 游戏网站排行网站开发人员职位
  • 集团网站建设 中企动力提供购物网站建设
  • 正能量网站入口十大旅游网站排名
  • 公司网站建设需求分析只有域名可以做网站吗
  • 网站源码配置数据库在拿在word上怎么做网站链接
  • 成品短视频网站源码搭建免费网页制作图
  • 建设集团网站价格网页游戏排行榜前十平台
  • 百度风云榜官网北京企业网站seo
  • 网站建设策划实施要素有哪些访问外国网站很慢
  • 莱芜网站网站建设集团网站建设服务
  • 专业做网站联系方式宁波外贸网站设计公司
  • asp网站500错误iis7天河网站建设哪家好
  • 教育网站模板下载提供网站建设备案公司
  • 网站关键字怎么优化北京十大影视公司
  • 怎么做网站 先简单的聊一下怎样给网站做后台
  • 上网建站推广wordpress 获取自定义字段
  • 一个wordpress程序搭建多个网站海外域名购买
  • 广州3d网站开发深圳网站公司招聘
  • 色彩 导航网站功能型网站建设需要多少钱
  • 网站策划书包括哪些内容文学投稿网站平台建设
  • 上海平面网站网络营销今后的发展趋势
  • 怎么做查成绩网站网站建设优化项目
  • 德州口碑好的网站制作公司手机上如何制作自己的网站
  • 商务网站的建设台州网站建设找哪家好点
  • 网站策划书需求分析大学学术建设专题网站
  • 长沙网站排名优化贵州 网站建设
  • gta5买房子网站建设网站推广主要用的软件