react 大冒险-render props-day 23

继 higher-order-component 後,今天来说明 react 中另个概念 render-props
所谓的 render-props 就是在 component 之间 share 的 prop 本身的值是 function

达成在 React Component 之间共享 code 的方法

一样从 HOC 该篇 的 ClickCounter 跟 HoverCounter 开始

这时候发现两个 component 中的 incrementCount 跟 updateTimes 高度重复
把 constructor 跟 incrementCount 抽出来,新增一个 Counter.js

但是 Counter return 的内容是 一个 render prop
Counter 的 render prop 分成两部分 this.state.count , this.incrementCount

import { Component } from "react";
class Counter extends Component {
	constructor(props) {
		super(props);
		this.state = {
			count: 0,
		};
		this.incrementCount = this.incrementCount.bind(this);
	}
	incrementCount() {
		this.setState((state) => {
			return { count: state.count + 1 };
		});
	}
	render() {
		const { count } = this.state;
		return <>{this.props.render(this.state.count, this.incrementCount)}</>;
	}
}

export default Counter;

回到 App.js,引入 Counter
这时候 pass in Counter 的 render prop 会是 function

import { Component } from "react";

import Counter from './Counter';
import ClickCounter from "./ClickCounter";

class App extends React.Component{
    render(){
        return(<Counter render={( count , incrementCount)=>(<ClickCounter count={count} incrementCount={incrementCount}/>)}/>)
    }
}

最後回到 ClickCounter.js
把 render 内的 state 都改为 prop (ClickCounter仅接受 prop,不再有 state)

import React from "react";

class ClickCounter extends React.Component {
	render() {
		const { count, incrementCount } = this.props;
		return (
			<div>
				<button onClick={incrementCount}>click {count} times</button>
			</div>
		);
	}
}

export default ClickCounter;

<<:  Day27 深入解析Elasticsearch Query DSL Range query

>>:  [Day-29] Node.js (nvm 切换不同node版本)

[day4] 安全签章 - 产生订单 & 签章(Sign)

准备讯息文本 依照参数说明,建立订单的资料结构(DAY3-参考),详细参数规格可以在永丰API技术规...

环境配置(node/golang)(Day3)

接续上篇提到的内容,这篇提到的主要会是golang与react会需要的环境配置 小提醒 在下面会有提...

RxJava - Backpressure

不知道大家有没有手冲咖啡的经验?如果没有的话,应该也看过或用过滤挂式咖啡,在冲咖啡时,水不能一次倒太...

[DAY 17] 回应试算表

存放题目和读取题目的google 试算表搞定了 呈现题目的google 表单也搞定了 接下来来说说记...

[DAY3]K8S元件初探-Control Plane Components

控制平面元件(Control Plane Components) 来人阿,先上个架构图 图片来源 官...