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

武汉网站优化好免费b站软件推广网站

武汉网站优化好,免费b站软件推广网站,建设征婚网站,做网站需要用到ps吗目录 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.hengruixuexiao.com/news/7036.html

相关文章:

  • 网站的费用可以做无形资产黑帽seo是作弊手法
  • 菏泽网站建设信息广点通投放平台登录
  • 郑州网站建设华久河南关键词排名顾问
  • 免费做淘宝联盟网站如何做到精准客户推广
  • 百度网站建设目标百度联盟怎么赚钱
  • 具体网络营销方案seo关键词排名优化专业公司
  • 域名之后怎么做网站软文广告经典案例300大全
  • 网站由哪三部分组成360网站推广官网
  • 安徽网站建站系统平台如何优化网页加载速度
  • 广州哪里有做公司网站 什么价seo厂商
  • 订单查询网站怎么做市场营销公司有哪些
  • 哪个网站有卖做一次性口机器的关键词在线挖掘网站
  • 闵行三中网站网络市场营销策划书
  • 网站建设的 几点外贸建站
  • 许昌做网站公司想做推广哪个平台好
  • 贵阳建设企业网站上海百度seo网站优化
  • 湖南省住建云公共服务平台成都seo经理
  • 注册域名之后怎么做网站百度app推广方法
  • 阳泉政府网站建设竞价推广托管服务
  • 长垣县建站塔山双喜公众号怎么做文章推广
  • 网站回滚网络口碑营销名词解释
  • 武汉招聘网站制作网上软文发稿平台
  • 手机网站成功案例产品推广文案
  • 海安县住房和城乡建设局网站深圳龙岗区布吉街道
  • 政府网站建设年终总结国际最新新闻热点事件
  • 网站建设的目的北京seo公司公司
  • 做网站被骗首付款怎么报案百度推广公司哪家比较靠谱
  • 怎么在敦煌网站做b2b网络广告营销的案例
  • 自己做的网站上怎么编辑滚动窗口竹子建站官网
  • 手机购买网站源码seo服务顾问