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

首頁 > 編程 > JavaScript > 正文

react 創(chuàng)建單例組件的方法

2019-11-19 13:57:20
字體:
供稿:網(wǎng)友

需求背景

最近有個(gè)需求,需要在項(xiàng)目中添加一個(gè)消息通知彈窗,告知用戶一些信息。

用戶看過消息后,就不再彈窗了。

問題

很明顯,這個(gè)需要后端的介入,提供相應(yīng)的接口(這樣可擴(kuò)展性更好)。

在開發(fā)過程中,遇到個(gè)問題:由于我們的系統(tǒng)是多頁面的,所以每次切換頁面,都會(huì)去請求后端的消息接口。。有一定的性能損耗。

因?yàn)槭嵌囗撁嫦到y(tǒng),使用單例組件貌似也沒啥意義(不過是個(gè)機(jī)會(huì)學(xué)習(xí)學(xué)習(xí)單例組件是怎么寫的)。
于是,想到使用瀏覽器緩存來記錄是否彈過窗了(當(dāng)然,得設(shè)定過期時(shí)間)。

如何寫單例組件

1、工具函數(shù):

import ReactDOM from 'react-dom';/** * ReactDOM 不推薦直接向 document.body mount 元素 * 當(dāng) node 不存在時(shí),創(chuàng)建一個(gè) div */function domRender(reactElem, node) { let div; if (node) {  div = typeof node === 'string'   ? window.document.getElementById(node)   : node; } else {  div = window.document.createElement('div');  window.document.body.appendChild(div); } return ReactDOM.render(reactElem, div);}

2、組件:

export class SingletonLoading extends Component { globalLoadingCount = 0; pageLoadingCount = 0; state = {  show: false,  className: '',  isGlobal: undefined } delayTimer = null; start = (options = {}) => {  // ... } stop = (options = {}) => {  // ... } stopAll() {  if (!this.state.show) return;  this.globalLoadingCount = 0;  this.pageLoadingCount = 0;  this.setState({show: false}); } get isGlobalLoading() {  return this.state.isGlobal && this.state.show; } get noWaiting() {  return this.noGlobalWaiting && this.pageLoadingCount < 1; } get toPageLoading() {  return this.noGlobalWaiting && this.isGlobalLoading; } get noGlobalWaiting() {  return this.globalLoadingCount < 1; } render() {  return <BreakLoading {...this.state} />; }}// 使用上面的工具函數(shù)export const loading = domRender(<SingletonLoading />);

3、使用組件:

import loading from 'xxx';// ...loading.start();loading.stop();

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沾益县| 互助| 邻水| 治多县| 类乌齐县| 蓝田县| 武陟县| 碌曲县| 中宁县| 确山县| 洛川县| 芦山县| 淳安县| 德阳市| 凉山| 南溪县| 姜堰市| 天祝| 樟树市| 榕江县| 隆子县| 新晃| 鄂尔多斯市| 扎兰屯市| 清河县| 元氏县| 河北区| 临潭县| 剑河县| 全南县| 山丹县| 萨嘎县| 大同县| 漳平市| 八宿县| 桃园市| 恭城| 榆中县| 江安县| 海丰县| 洛扎县|