日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
可視化搭建平臺的地圖組件和日歷組件方案選型

可視化搭建平臺除了需要為用戶提供簡單便捷的操作方式之外, 還需要提供豐富的組件支持和組件擴(kuò)展, 這樣才能滿足更多用戶的業(yè)務(wù)需求.

在 H5-dooring 創(chuàng)建的初期主要考慮的方向是用戶使用的便捷性, 即最大程度的降低用戶操作成本, 所以采用了智能布局, 也就是react-grid-layout這個庫, 之前考慮過完全的自由布局, 也實(shí)現(xiàn)了一套自由布局的方案(使用react-draggable和React-Resizable), 但是崇尚 less is more 的設(shè)計(jì)哲學(xué), 還是堅(jiān)定的走了智能布局的道路.

筆者接下來會介紹如何在 H5頁面編輯器 中自定義開發(fā)自己的組件, 以及如何開發(fā)可以使H5展現(xiàn)力更強(qiáng)的組件: 地圖和日歷組件.

如果大家對可視化拖拽搭建平臺的實(shí)現(xiàn)方案感興趣, 可以參考我之前的文章和 github. 后續(xù)會更新更多l(xiāng)owcode和nocode的技術(shù)實(shí)現(xiàn)和國內(nèi)外方案分析.

演示效果

實(shí)現(xiàn)自定義組件開發(fā)的流程

作為前端工程師, 我們對于開發(fā)vue組件或者react組件想必不會很陌生, 對于一個可擴(kuò)展復(fù)用當(dāng)然組件來說, 我們只需要做好以下幾點(diǎn)就好了:

  • 語義化 : 組件命名可讀性強(qiáng), 比如antd, element的組件風(fēng)格
  • 重用-發(fā)布等價原則(REP): 組件中的類要么都是可重用的,要么都不可重用
  • 共同重用原則(CRP): 組件中所有類應(yīng)該是共同重用的,如果重用了組件中的一個類就應(yīng)該重用組件中的所有類
  • 共同封閉原則(CCP): 組件的所有類對同一性質(zhì)的變化是共同封閉的, 同時不會影響到外部, 即對修改是封閉的,但對擴(kuò)展應(yīng)該是開放的
  • 穩(wěn)定抽象原則(SAP): 組件的抽象程度應(yīng)該與其穩(wěn)定程度保持一致

基本上任何組件的設(shè)計(jì)都會或多或少的遵循以上原則, 所以說我們在實(shí)現(xiàn)自定義組件時, 往往也需要考慮內(nèi)外部的抽象.

我們定義Dooring的自定義組件時, 會分為以下幾個步驟:

組件的shape主要是組件對外暴露的屬性和方法, 可以實(shí)現(xiàn)用戶層面的配置, 也就是vue/react組件的props, 由于項(xiàng)目使用typescript編寫, 所以我們需要定義對應(yīng)的ts類型, 來實(shí)現(xiàn)組件的健壯性和可溯源. 最后我們會定義組件初始化的樣子(init shape), 然后才是實(shí)現(xiàn)組件, 這樣的步驟好處是我們可以明確組件的邊界, 自然貼合上面筆者說的組件設(shè)計(jì)原則.

以上流程我們會產(chǎn)生如下三個文件:

  • componet 組件的實(shí)現(xiàn)代碼
  • schema 組件的shape和type
  • template 組件的類型映射模版

開發(fā)一個日歷組件

我們接下來就來實(shí)現(xiàn)拖拽平臺的日歷組件. 日歷組件我們直接采用zarm的Calendar組件, 將其封裝成dooring的受控組件.

日歷組件我們可以暴露如下props給到用戶自行配置:

  • time 日歷顯示的時間
  • range 日歷被選中的時間范圍, 主要用來做日程管理
  • color 日歷默認(rèn)的文本顏色
  • selectedColor 選中區(qū)域的顏色
  • round 日歷的圓角

對應(yīng)的view如下:

由于組件的實(shí)現(xiàn)只需要處理傳過來的數(shù)據(jù), 這里我們看看簡單的代碼實(shí)現(xiàn):

 
 
 
 
  1. import React, { useState, memo, useEffect, useRef } from 'react'; 
  2. import { Calendar } from 'zarm'; 
  3. import styles from './index.less'; 
  4. import { ICalendarConfig } from './schema'; 
  5.  
  6. const CalendarCp = memo((props: ICalendarConfig & { isTpl: boolean }) => { 
  7.   const { time, range, color, selectedColor, round, isTpl } = props; 
  8.   // ... 
  9.   return ( 
  10.      
  11.       
  12.         multiple={!!range} 
  13.         value={value} 
  14.         min={min} 
  15.         max={new Date(max)} 
  16.         disabledDate={(date:any) => /(0|6)/.test(date.getDay())} 
  17.         onChange={(value:Date[] | undefined) => { 
  18.           setValue(value); 
  19.         }} 
  20.       /> 
  21.     
 
  • }); 
  •  
  • export default CalendarCp; 
  •  這是一個dooring組件的基本雛形, 其次我們看看 schema 部分. 這一部分主要包含了組件的shape的類型定義和基本的可編輯屬性(editable), 如下:

     
     
     
     
    1. export type TCalendarEditData = Array
    2. export interface ICalendarConfig { 
    3.   time: TTextDefaultType; 
    4.   range: TTextDefaultType; 
    5.   color: TTextDefaultType; 
    6.   selectedColor: TTextDefaultType; 
    7.   round: TNumberDefaultType; 
    8.  
    9. export interface ICalendarSchema { 
    10.   editData: TCalendarEditData; 
    11.   config: ICalendarConfig; 
    12.  
    13. const Calendar: ICalendarSchema = { 
    14.   editData: [ 
    15.     { 
    16.       key: 'time', 
    17.       name: '日歷時間', 
    18.       type: 'Text', 
    19.       placeholder: '格式如2020-01或2020-11' 
    20.     }, 
    21.     { 
    22.       key: 'range', 
    23.       name: '日歷選中范圍', 
    24.       type: 'Text', 
    25.       placeholder: '格式如01-12(幾號到幾號)' 
    26.     }, 
    27.     { 
    28.       key: 'color', 
    29.       name: '文本顏色', 
    30.       type: 'Color' 
    31.     }, 
    32.     { 
    33.       key: 'selectedColor', 
    34.       name: '選中顏色', 
    35.       type: 'Color' 
    36.     }, 
    37.     { 
    38.       key: 'round', 
    39.       name: '圓角', 
    40.       type: 'Number' 
    41.     }, 
    42.   ], 
    43.   config: { 
    44.     time: '2020-12', 
    45.     range: '05-08', 
    46.     color: 'rgba(0,0,0,1)', 
    47.     selectedColor: 'rgba(22,40,212,1)', 
    48.     round: 0 
    49.   }, 
    50. }; 
    51.  
    52. export default Calendar; 

    如果我們想增加屬性, 我們只需要在這個文件里添加對應(yīng)的屬性和類型即可.

    template主要是定義了組件的分區(qū)和初始高度, 代碼如下:

     
     
     
     
    1. const template = { 
    2.   type: 'Calendar', 
    3.   h: 185, 
    4.   displayName: '日歷組件', 
    5. }; 
    6. export default template; 

    有了以上三個部分, 我們要可以渲染出一個在畫布中可拖拽, 可編輯的組件了. 當(dāng)然這塊還需要FormRender的幫助, 這塊筆者后期會介紹.

    以上基本就實(shí)現(xiàn)了一個可拖拽可配置的日歷組件, 我們接下來繼續(xù)看看地圖組件.

    開發(fā)地圖組件

    有了以上的組件開發(fā)經(jīng)驗(yàn)之后我們開發(fā)地圖組件就非常方便了. 地圖組件我們這里使用了@uiw/react-baidu-map, 也就是百度地圖的React版本, 大家也可以使用高德地圖.因?yàn)榈貓D組件react-baidu-map 需要提前閱讀對應(yīng)的文檔, 這里筆者就不一一介紹了, 我們直接來看如何實(shí)現(xiàn).同樣我們也需要定義好地圖對外暴露的props, 筆者這里簡單定義幾個可配置的屬性:

    • ak 百度地圖使用憑證, 建議大家在生產(chǎn)環(huán)境替換成自己的
    • location 地點(diǎn)的經(jīng)緯度, 方便快速定位
    • position 地點(diǎn)的地名, 我們可以自定義設(shè)置

    如下圖:

    基本的代碼實(shí)現(xiàn)如下:

     
     
     
     
    1. import React, { memo } from 'react'; 
    2. import { Map, Marker, Label, APILoader } from '@uiw/react-baidu-map'; 
    3. import styles from './index.less'; 
    4. import { IMapConfig } from './schema'; 
    5.  
    6. const Mapcomponent = memo((props: IMapConfig) => { 
    7.   const { ak, location, position } = props; 
    8.   return ( 
    9.          
    10.            
    11.              
    12.                
    13.               
    14.                 content={location}  
    15.                 position={{ lng: position[0], lat: position[1] }}  
    16.                 style={{color: '#000', borderColor: '#06c', padding: '3px 10px', borderRadius: '6px'}}  
    17.               /> 
    18.              
    19.            
    20.         
     
  •       ) 
  • }); 
  •  
  • export default Mapcomponent; 
  •  最后

    目前H5-Dooring可視化搭建平臺還在持續(xù)更新, 主要更新如下:

    • 列表組件添加搜索功能
    • 圖標(biāo)組件添加鏈接交互功能, 自定義文本, 文本顏色, 文本大小配置
    • 圖表組件支持自定義第三方api接口, 一鍵導(dǎo)入第三方數(shù)據(jù)源


    本文標(biāo)題:可視化搭建平臺的地圖組件和日歷組件方案選型
    文章源于:http://www.dlmjj.cn/article/djicidj.html