继 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版本)
准备讯息文本 依照参数说明,建立订单的资料结构(DAY3-参考),详细参数规格可以在永丰API技术规...
接续上篇提到的内容,这篇提到的主要会是golang与react会需要的环境配置 小提醒 在下面会有提...
不知道大家有没有手冲咖啡的经验?如果没有的话,应该也看过或用过滤挂式咖啡,在冲咖啡时,水不能一次倒太...
存放题目和读取题目的google 试算表搞定了 呈现题目的google 表单也搞定了 接下来来说说记...
控制平面元件(Control Plane Components) 来人阿,先上个架构图 图片来源 官...