国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

React組件重構之嵌套+繼承及高階組件詳解

2024-05-06 15:32:37
字體:
來源:轉載
供稿:網友

前言

在最近做的一個react項目中,遇到了一個比較典型的需要重構的場景:提取兩個組件中共同的部分。

最開始通過使用嵌套組件和繼承的方式完成了這次重構。

但是后來又用高階組件重新寫了一遍,發現更好一點。

在這里記錄下這兩種方式以便之后參考和演進。

本次重構的場景

因為場景涉及到具體的業務,所以我現在將它簡化為一個簡單的場景。

現在有兩個黑色箱子,箱子上都有一個紅色按鈕,A箱子充滿氣體,按了按鈕之后箱子里面氣體變紅,B箱子充滿泥土,按了之后箱子里面泥土變紅。

那么現在上一個簡單的重構前代碼:

BoxA.jsx

import React, { Component, PropTypes } from 'react'class BoxA extends Component { state={ color:'black' } handleClick=()=>{ this.setState({  color:'red' }) } handleShake=()=>{ /* 搖動后氣體沒聲音 */ } render() { return (  /* 這里面當然沒有onShake這種事件,理解意思就行了 */  <div style={{backgroundColor:'black'}} onShake={this.handleShake}>   <button onClick={this.handleClick} style={{backgroundColor:'red'}}></button>   <div>   /* 氣體組件,沒毛病 */   <氣體 color={this.state.color} />   </div>  </div> ) }}

BoxB.jsx

import React, { Component, PropTypes } from 'react'class BoxB extends Component { state={ color:'black' } handleClick=()=>{ this.setState({  color:'red' }) } handleShake=()=>{ /* 搖動后泥土有聲音 */ } render() { return (  <div style={{backgroundColor:'black'}} onShake={this.handleShake}>   <button onClick={this.handleClick} style={{backgroundColor:'red'}}></button>   <div>   <泥土 color={this.state.color} />   </div>  </div> ) }}

使用嵌套組件進行重構

看看上面的代碼,即使在業務簡化的情況下都有很多重復的,所以得重構。

對于這種很明顯的箱子類問題,一般都會采用嵌套組件的方式重構。
Box.jsx

import React, { Component, PropTypes } from 'react'class Box extends Component { static propTypes = { children: PropTypes.node, onClick: PropTypes.func, onShake: PropTypes.func } render() { return (  <div style={{backgroundColor:'black'}} onShake={this.props.onShake}>   <button onClick={this.props.onClick} style={{backgroundColor:'red'}}></button>   <div>   {this.children}   </div>  </div> ) }}

BoxA.jsx

import React, { Component, PropTypes } from 'react'import Box from './Box.jsx'class BoxA extends Component { state={ color:'black' } handleClick=()=>{ this.setState({  color:'red' }) } handleShake=()=>{ /* 搖動后氣體沒聲音 */ } render() { return (  <Box onClick={this.handleClick} onShake={this.props.handleShake}>  <氣體 color={this.state.color} />  </Box> ) }}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 盐边县| 如东县| 冷水江市| 吉林省| 甘泉县| 漾濞| 洛隆县| 青铜峡市| 屯昌县| 五大连池市| 全南县| 四平市| 临城县| 丰台区| 德清县| 获嘉县| 久治县| 平乡县| 鄂州市| 富锦市| 屯留县| 云南省| 增城市| 新民市| 孟连| 无为县| 施秉县| 天气| 杭州市| 河间市| 腾冲县| 宕昌县| 攀枝花市| 固原市| 静安区| 泽州县| 新乡县| 新龙县| 左权县| 阿巴嘎旗| 中卫市|