本文主要為您提供Quick BI的一些功能點(diǎn)示例。
下鉆/聯(lián)動(dòng)/跳轉(zhuǎn)
dispatch
方法即可。const dispatch = props.customProps.dispatch;
const dataIndex = 1; // 需要下鉆的維度在 props.customProps.data 中的數(shù)組下標(biāo)
if (typeof dispatch === 'function') {
dispatch({
type: 'select',
payload: {
dataIndex: dataIndex,
},
});
}
樣式隔離
由于 CSS 選擇器的作用域是全局的,所以很容易引起選擇器沖突, 為了保證你編寫(xiě)的自定義組件的樣式不影響 Quick BI 其他的組件, 可以通過(guò)以下方式實(shí)現(xiàn)樣式隔離。
Shadow DOM
詳情請(qǐng)參見(jiàn)caniuse。
CSS Modules
CSS Modules 指的是我們像 JS 模塊一樣去引入我們的 CSS 代碼, 代碼中的每一個(gè)類(lèi)名都是引入對(duì)象的一個(gè)屬性, 編譯時(shí)會(huì)將 CSS 類(lèi)名加上唯一 hash 值。
// index.module.css
.test-class {
color: #ddd;
}
// 編譯后的 index.module.css
._2GdXV4wBykbQ3MN-f1VJv7 {
color: #ddd;
}
import styles from './index.css';
// 使用類(lèi)
document.getElementById('foo').classList.add(styles['test-class'])
BEM 規(guī)范
如果你不想使用 CSS Modules, 則需要自己保證樣式類(lèi)名的唯一性。
// good, 所有樣式都寫(xiě)在 .my-component 父類(lèi)內(nèi).
.my-component {
color: #ddd;
ul {
color: #aaa
}
&__header {}
&__header--title {}
}
// bad, 樣式盡量不要定義在父類(lèi)之外
ul {
background: #aaa
}
國(guó)際化
自定義組件可以通過(guò)bi-open-sdk
或bi-open-react-sdk
提供的I18n
類(lèi)將內(nèi)容本地化為相關(guān)語(yǔ)言。
初始化
I18n.init
可以初始化國(guó)際化,首先將翻譯好的語(yǔ)言,以key、value 的方式組裝到resources
中, 然后導(dǎo)出 t
翻譯函數(shù)和 i18n
實(shí)例。示例如下:import { I18n } from 'bi-open-sdk';
const { t, i18n } = I18n.init({
resources: {
// 英文 key
'en-US': {
起始角度: 'start angle',
},
// 日文 key
'ja-JP': {
起始角度: '開(kāi)始角度',
}
},
});
在本示例中,我們?cè)O(shè)置了兩種語(yǔ)言:en-US
和ja-JP
,目前所支持的語(yǔ)種如下表。
區(qū)域字符串 | 語(yǔ)言 |
---|---|
zh-CN | 簡(jiǎn)體中文(默認(rèn)) |
en-US | 英語(yǔ) |
ja-JP | 日語(yǔ) |
翻譯函數(shù)
t
函數(shù)可以翻譯語(yǔ)言, t
函數(shù)的返回值依賴(lài)resources
配置的語(yǔ)言包,如果 resources
中沒(méi)有配置對(duì)應(yīng)的從條翻譯, t
函數(shù)將返回第一個(gè)參數(shù)值。console.log(t('起始角度')) // start angle
console.log(t('結(jié)束角度')) // 在 resources 未配置 "結(jié)束角度" 的翻譯, 返回 "結(jié)束角度"
改變語(yǔ)言
i18n.changeLanguage
可以切換語(yǔ)言,一般來(lái)說(shuō)Quick BI內(nèi)置了語(yǔ)言切換的邏輯,無(wú)需手動(dòng)調(diào)用i18n.changeLanguage
。// 默認(rèn)語(yǔ)言為 zh-CN
console.log(t('起始角度')) // 起始角度
i18n.changeLanguage('en-US') // 無(wú)需手動(dòng)調(diào)用
console.log(t('起始角度')) // start angle
i18n.changeLanguage('ja-JP') // 無(wú)需手動(dòng)調(diào)用
console.log(t('起始角度')) // 開(kāi)始角度
拼接詞條
t
函數(shù)第二個(gè)參數(shù)傳入。const { t, i18n } = I18n.init({
resources: {
'en-US': {
'我的{{version}}{{item}}': 'my {{version}} {{item}}',
'新': 'new',
'手機(jī)': 'cellphone'
},
},
});
// 拼接 "新" "手機(jī)" 兩個(gè)詞條
console.log(t('我的{{version}}{{item}}', { item: t('手機(jī)'), version: t('新') })) // my new cellphone
單復(fù)數(shù)翻譯
resources
中,為需要處理復(fù)數(shù)的詞條的 key
的末尾增加 _plural
后綴,代表復(fù)數(shù)形式的翻譯。const { t, i18n } = I18n.init({
resources: {
'en-US': {
'{{count}}個(gè)蘋(píng)果': '{{count}} apple', // 單數(shù)翻譯
'{{count}}個(gè)蘋(píng)果_plural': '{{count}} apples', // 復(fù)數(shù)翻譯
},
},
});
console.log(t('{{count}}個(gè)蘋(píng)果', { count: 3 })) // 3 apples
console.log(t('{{count}}個(gè)蘋(píng)果', { count: 1 })) // 1 apple
獲取當(dāng)前語(yǔ)言
const currentLang = window.globalConfig.currentLang
const currentLang = i18n.lng
性能優(yōu)化
下面是有關(guān)如何實(shí)現(xiàn)自定義組件最佳性能的一些建議。
更新SDK
隨著我們不斷改進(jìn)和增強(qiáng)平臺(tái),新版的 API 會(huì)不斷發(fā)布。若要充分利用 Quick BI 平臺(tái)的功能,建議使用最新版本的bi-open-sdk
或bi-open-react-sdk
來(lái)保持最新?tīng)顟B(tài)。
減少打包體積
- react - 16.12.0
- react-dom - 16.12.0
- lodash - 4.17.20
- moment - 2.29.1
meta.js
,為了保證儀表板首屏加載速度,請(qǐng)不要在meta.js
內(nèi)引入過(guò)多的第三方庫(kù),以確保meta.js
編譯后的體積足夠小。
緩存DOM節(jié)點(diǎn)
從DOM檢索節(jié)點(diǎn)或節(jié)點(diǎn)列表時(shí),需要考慮是否可以在后續(xù)計(jì)算(有時(shí)甚至是下一次循環(huán)迭代)中重用它們。 只要不需要在相關(guān)區(qū)域添加或刪除其他節(jié)點(diǎn),緩存它們便可以提高應(yīng)用程序的整體效率。
避免 DOM 操作
盡可能限制DOM操作。 插入操作(如 prepend()、append() 和 after())非常耗時(shí),除非必要,否則不應(yīng)使用。