国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

步入React正殿 - React組件設(shè)計(jì)模式

這篇具有很好參考價(jià)值的文章主要介紹了步入React正殿 - React組件設(shè)計(jì)模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

擴(kuò)展學(xué)習(xí)資料

高階組件

@/src/components/hoc/withTooltip.js

@/src/components/hoc/itemA.jsx

@/src/components/hoc/itemB.jsx

@/src/App.js

函數(shù)作為子組件【Render pprops】

函數(shù)作為子組件

@/src/components/rp/itemC.jsx【父組件】

@/src/components/rp/withTooltip.js【子組件】

練習(xí)


擴(kuò)展學(xué)習(xí)資料

資料名稱

鏈接

擴(kuò)展閱讀

React組件Render Props VS HOC 設(shè)計(jì)模式 - 簡(jiǎn)書

擴(kuò)展閱讀

React Hooks 之于 HoC 與 Render Props - 知乎

高階組件

復(fù)用業(yè)務(wù)邏輯:判斷用戶是否是vip:是->有列表,有推薦

一個(gè)組件—高階函數(shù)—>新的邏輯的組件

高階組件是對(duì)已有組件的封裝形成新的組件之后有自己的狀態(tài)和邏輯并可以傳遞已有的組件

const NewComponent = higherOrderComponent(OldComponent)

hoc【higherOrderComponent】

@/src/components/hoc/withTooltip.js

import React from 'react';
// 帶工具提示【函數(shù)組件】
const withTooltip = (Component) => {
? class HOC extends React.Component {
? ? state = {
? ? ? showToolTip: false,
? ? ? content: '',
? ? };
? ? handleOver = (event) => {
? ? ? this.setState({
? ? ? ? showToolTip: true,
? ? ? ? content: event.target.innerText,
? ? ? });
? ? };
? ? handleOut = () => {
? ? ? this.setState({
? ? ? ? showToolTip: false,
? ? ? ? content: '',
? ? ? });
? ? };
? ? render() {
? ? ? return (
? ? ? ? <div onMouseOver={this.handleOver} onMouseOut={this.handleOut}>
? ? ? ? ? <Component action={this.state} {...this.props} />
? ? ? ? </div>
? ? ? );
? ? }
? }
? return HOC;
};
export default withTooltip;

@/src/components/hoc/itemA.jsx

import React from 'react';
import withTooltip from './withTooltip';
// 一個(gè)簡(jiǎn)單的帶工具提示-業(yè)務(wù)組件A
const ItemA = (props) => {
? return (
? ? <div className='container'>
? ? ? <button className='btn btn-primary' type='btn'>
? ? ? ? Tooltip A
? ? ? </button>
? ? ? {props.action.showToolTip && (
? ? ? ? <span className='badge badge-pill badge-primary ml-2'>
? ? ? ? ? {props.action.content}
? ? ? ? </span>
? ? ? )}
? ? </div>
? );
};
export default withTooltip(ItemA);

@/src/components/hoc/itemB.jsx

import React from 'react';
import withTooltip from './withTooltip';
// 一個(gè)簡(jiǎn)單的帶工具提示-業(yè)務(wù)組件B
const ItemB = (props) => {
? return (
? ? <div className='container'>
? ? ? <button className='btn btn-danger' type='btn'>
? ? ? ? Tooltip B <i>斜體</i>、<b>粗體</b>
? ? ? </button>
? ? ? {props.action.showToolTip && (
? ? ? ? <span className='badge badge-pill badge-danger ml-2'>
? ? ? ? ? {props.action.content}
? ? ? ? </span>
? ? ? )}
? ? </div>
? );
};
export default withTooltip(ItemB);

@/src/App.js

import React, { PureComponent } from 'react';
import ItemA from './components/hoc/itemA';
import ItemB from './components/hoc/itemB';
class App extends PureComponent {
    render() {
    ? ? console.log('App - rendering');
    ? ? return (
    ? ? ? <>
    ? ? ? ? <ItemA id="1" />
    ? ? ? ? <ItemB id="2" />
    ? ? ? </>
    ?	 );
    }
}
export default App;

ItemA,ItemB都需要相同的withTooltip【props.action】顯示邏輯,只需要將withTooltip封裝就能得到一個(gè)將已有組件封裝為高階組件高階(封裝)函數(shù)

  • 一個(gè)函數(shù),傳入一個(gè)組件,返回一個(gè)新組件
  • 一般不會(huì)有UI展現(xiàn)
  • 提供一些可復(fù)用的功能

函數(shù)作為子組件【Render pprops】

解決復(fù)用邏輯的問題

函數(shù)作為子組件

步入React正殿 - React組件設(shè)計(jì)模式,React相關(guān),react.js,設(shè)計(jì)模式,前端

?1.定義子組件

// 子組件
render () {
    return (
        <div>
        	{this.props.render(this.state)}
         </div>                
    )
}

2.使用函數(shù)作為Props

// 父組件
<RenderPropComponent render={(state)=>(
    <div>
       content
    </div>
)}>

@/src/components/rp/itemC.jsx【父組件】

import React from 'react';
import WithTooltip from './withTooltip';
// 一個(gè)簡(jiǎn)單的帶工具提示-業(yè)務(wù)組件A
const ItemC = (props) => {
? return (
? ? <div className='container'>
? ? ? <WithTooltip
? ? ? ? render={({ showToolTip, content }) => (
? ? ? ? ? <div>
? ? ? ? ? ? <button className='btn btn-primary' type='btn'>
? ? ? ? ? ? ? Tooltip C
? ? ? ? ? ? </button>
? ? ? ? ? ? {showToolTip && (
? ? ? ? ? ? ? <span className='badge badge-pill badge-primary ml-2'>
? ? ? ? ? ? ? ? {content}
? ? ? ? ? ? ? </span>
? ? ? ? ? ? )}
? ? ? ? ? </div>
? ? ? ? )}>
? ? ? ? {({ showToolTip, content }) => (
? ? ? ? ? <div>
? ? ? ? ? ? <button className='btn btn-primary' type='btn'>
? ? ? ? ? ? ? Tooltip D
? ? ? ? ? ? </button>
? ? ? ? ? ? {showToolTip && (
? ? ? ? ? ? ? <span className='badge badge-pill badge-primary ml-2'>
? ? ? ? ? ? ? ? {content}
? ? ? ? ? ? ? </span>
? ? ? ? ? ? )}
? ? ? ? ? </div>
? ? ? ? )}
? ? ? </WithTooltip>
? ? </div>
? );
};
export default ItemC;

@/src/components/rp/withTooltip.js【子組件】

import React from 'react';
class WithTooltip extends React.Component {
? // // eslint-disable-next-line no-useless-constructor
? // constructor(props) {
? // ?super(props);
? // }
? state = {
? ? showToolTip: false,
? ? content: '',
? };
? handleOver = (event) => {
? ? this.setState({
? ? ? showToolTip: true,
? ? ? content: event.target.innerText,
? ? });
? };
? handleOut = () => {
? ? this.setState({
? ? ? showToolTip: false,
? ? ? content: '',
? ? });
? };
? render() {
? ? return (
? ? ? <div onMouseOver={this.handleOver} onMouseOut={this.handleOut}>
? ? ? ? {this.props.render && this.props.render(this.state)}
? ? ? ? {this.props.children && this.props.children(this.state)}
? ? ? </div>
? ? );
? }
}
export default WithTooltip;

練習(xí)

【題目1】分別使用Render Props和HOC模式實(shí)現(xiàn)購(gòu)物車ToolTips功能;

【題目2】說明Render Props 和 HOC設(shè)計(jì)模式的優(yōu)缺點(diǎn)分別是什么;文章來源地址http://www.zghlxwxcb.cn/news/detail-654117.html

到了這里,關(guān)于步入React正殿 - React組件設(shè)計(jì)模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 設(shè)計(jì)模式——裝飾器模式(Decorator Pattern)+ Spring相關(guān)源碼

    別名:包裝模式(Wrapper Pattern) 類型:結(jié)構(gòu)型模式。 目的:指在不改變現(xiàn)有對(duì)象結(jié)構(gòu)的情況下,動(dòng)態(tài)地給該對(duì)象增加一些職責(zé)額外功能。 給對(duì)象添加新功能時(shí),并不是在對(duì)象類中直接添加,而是在裝飾器類中添加。 在裝飾類中添加新功能,你可以增強(qiáng)原先對(duì)象的方法,也可

    2024年02月06日
    瀏覽(19)
  • 設(shè)計(jì)模式——觀察者模式(Observer Pattern)+ Spring相關(guān)源碼

    類型:行為型模式 目的:當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),其所有依賴者(觀察者)都會(huì)收到通知并自動(dòng)更新。 2.1.1 定義觀察者 2.1.2 定義被觀察對(duì)象 2.1.3 使用 2.2.1 觀察者接口Observer 2.2.1 被觀察者對(duì)象Observable 2.3.1 觀察者 2.3.2 被觀察者 創(chuàng)建型模式 結(jié)構(gòu)型模式 1、設(shè)計(jì)模式——

    2024年02月06日
    瀏覽(23)
  • C++ 設(shè)計(jì)模式----組件協(xié)作型模式

    C++ 設(shè)計(jì)模式----組件協(xié)作型模式

    ?理解隔離變化 ? 從宏觀層面來看,面向?qū)ο蟮臉?gòu)建方式更能適應(yīng)軟件的變化,能將變化所帶來的影響減為最小 ?各司其職 ? ? 從微觀層面來看,面向?qū)ο蟮姆绞礁鼜?qiáng)調(diào)各個(gè)類的“責(zé)任” ? ? 由于需求變化導(dǎo)致的新增類型不應(yīng)該影響原來類型的實(shí)現(xiàn)——是所謂各負(fù)其責(zé)

    2024年02月09日
    瀏覽(17)
  • 設(shè)計(jì)模式——責(zé)任鏈模式(Chain of Responsibility Pattern)+ Spring相關(guān)源碼

    類型: 行為型模式 每個(gè)接收者都包含對(duì)另一個(gè)接收者的引用。如果一個(gè)對(duì)象不能處理該請(qǐng)求,那么它會(huì)把相同的請(qǐng)求傳給下一個(gè)接收者,依此類推。 目的: 職責(zé)鏈上的處理者負(fù)責(zé)處理請(qǐng)求,客戶只需要將請(qǐng)求發(fā)送到職責(zé)鏈上即可,無須關(guān)心請(qǐng)求的處理細(xì)節(jié)和請(qǐng)求的傳遞,所

    2024年02月05日
    瀏覽(23)
  • React.js 中用于高質(zhì)量應(yīng)用程序的最佳實(shí)踐和設(shè)計(jì)模式

    原文:Best Practices and Design Patterns in React.js for High-Quality Applications,適當(dāng)增刪 原作者:Ori Baram 文章已獲原文作者授權(quán),禁止轉(zhuǎn)載和商用 不按文件類型對(duì)組件進(jìn)行分組,而是按特征。示例: 小而集中的組件易于理解,維護(hù)和測(cè)試。 假設(shè)您有一個(gè)UserProfile組件代碼體積逐漸變大

    2024年02月15日
    瀏覽(93)
  • JavaScript 發(fā)布-訂閱設(shè)計(jì)模式實(shí)現(xiàn) React EventBus(相當(dāng)于vue的$Bus)非父子之間通信

    參考文檔:https://github1s.com/browserify/events/blob/main/events.js ? ? ? ? ? ? ? ? ?https://www.npmjs.com/package/events ? ? ? ? ? ? ? ? ?https://github.com/browserify/events ? ? ? ? ? ? ? ? ? ? 首先先新建一個(gè)文件eventBus.tsx 然后再組件A使用=接收 然后再組件B使用=觸發(fā) ? ? 安裝這個(gè)events插件

    2023年04月18日
    瀏覽(373)
  • 狀態(tài)設(shè)計(jì)模式(State Pattern)[論點(diǎn):概念、相關(guān)角色、圖示、示例代碼、框架中的運(yùn)用、適用場(chǎng)景]

    狀態(tài)設(shè)計(jì)模式(State Pattern)[論點(diǎn):概念、相關(guān)角色、圖示、示例代碼、框架中的運(yùn)用、適用場(chǎng)景]

    ??????? 狀態(tài)模式 (State Pattern)是一種行為型設(shè)計(jì)模式,用于解決對(duì)象在不同狀態(tài)下的行為問題。它允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。狀態(tài)模式主要包含三個(gè)部分: 上下文 (Context)、 狀態(tài)接口 (State)和 具體狀態(tài)實(shí)現(xiàn)類 (ConcreteState)。 狀態(tài)接口(St

    2023年04月14日
    瀏覽(27)
  • 設(shè)計(jì)模式、Java8新特性實(shí)戰(zhàn) - List<T> 抽象統(tǒng)計(jì)組件

    設(shè)計(jì)模式、Java8新特性實(shí)戰(zhàn) - List<T> 抽象統(tǒng)計(jì)組件

    在日常寫代碼的過程中,針對(duì)List集合,統(tǒng)計(jì)里面的某個(gè)屬性,是經(jīng)常的事情,針對(duì)List的某個(gè)屬性的統(tǒng)計(jì),我們目前大部分時(shí)候的代碼都是這樣寫,每統(tǒng)計(jì)一個(gè)變量,就要定義一個(gè)值,且要在for循環(huán)增加一行累計(jì)的代碼,比較繁瑣,而且代碼寫出來不夠優(yōu)雅。 利用頂層抽象的

    2024年02月14日
    瀏覽(27)
  • [Unity] 單例設(shè)計(jì)模式, 可供繼承的單例組件模板類

    一個(gè)可供繼承的單例組件模板類: 因?yàn)?Unity 是單線程的, 所以在這里沒有必要使用雙檢索 例如你要?jiǎng)?chuàng)建一個(gè)全局的單例管理類, 可以這樣使用: 盡量避免讓 SingletonComponent 幫你創(chuàng)建組件, 因?yàn)樗皇菃渭兊膶⒔M件創(chuàng)建, 并掛載到空對(duì)象上, 而不會(huì)進(jìn)行任何其他行為. 如果你的組件

    2024年02月08日
    瀏覽(24)
  • 命令設(shè)計(jì)模式(Command Pattern)[論點(diǎn):概念、組成角色、相關(guān)圖示、示例代碼、框架中的運(yùn)用、適用場(chǎng)景]

    命令設(shè)計(jì)模式(Command Pattern)[論點(diǎn):概念、組成角色、相關(guān)圖示、示例代碼、框架中的運(yùn)用、適用場(chǎng)景]

    ??????? 命令設(shè)計(jì)模式 (Command Pattern)是一種行為設(shè)計(jì)模式,它將請(qǐng)求的操作封裝為一個(gè)對(duì)象,從而實(shí)現(xiàn)請(qǐng)求者和執(zhí)行者之間的解耦。這樣,請(qǐng)求者只需要知道如何發(fā)送請(qǐng)求,而無需關(guān)心請(qǐng)求的具體執(zhí)行過程。命令模式在很多場(chǎng)景下都非常有用,例如撤銷操作、延遲執(zhí)行、

    2024年02月01日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包