1.2.0 • Published 4 months ago

@blueking/bk-query-component v1.2.0

Weekly downloads
-
License
-
Repository
-
Last release
4 months ago

DataQuery 组件化

基于Omi框架,使用JSX语法快速开发的Web Component,用以支持计算平台查询组件化需求,能够跨平台,不依赖运行时框架的组件。

开始

安装依赖

npm install

运行项目

npm run start

项目打包

npm run build

打包产物在dist中,其中main.js是页面级入口,如果只需要组件本身,引入dist/assets下,除了main.xxx.js之外的所有文件,即可使用<data-query></data-query>组件。

如何开发

快速开发组件

组件的开发依赖omi框架,语法与JSX相同,一个较为标准的组件,并支持TS提示语法的,应该为

import { h, WeElement, tag } from 'omi';
import styles from './index.scss';
import iconStyles from '@/common/icon/style.css' // 如果要使用bk-icon,必须引入样式

interface IDemoProps {
  href?: string,
  disabled?: boolean,
  type?: 'default' | 'primary' | 'danger',
  onClick?: (e: any) => void
}

const tagName = 'demo'

/** 声明,用以支持TS的自动补全 */
declare global {
  namespace JSX {
    interface IntrinsicElements {
      [tagName]: Omi.Props & IDemoProps
    }
  }
}

@tag(tagName)
export default class oButton extends WeElement<ButtonProps> {
  /**
   * static css
   *  方法,将定义组件的CSS样式
   */
  static css = `
    ${styles}
    ${iconStyles}
  `

  /**
   * static defaultProps
   *  方法给定Props的默认值
   */
  static defaultProps = {
    href: 'demo',
    disabled: false,
    type: 'default'
  }

  /**
   * static propTypes
   * 如果要使props在原声HTML中支持,务必写propTypes,并注意类型定义是String 而非 string。
   * 如果在omi内使用的组件,则不需要定义此静态变量
   */
  static propTypes = {
    href: String,
    disabled: Boolean,
    type: String
  }

  render(props: IDemoProps) {
    return (...)
  }

组件通讯

父子通讯

父子组件通讯,可以使用fire自定义事件,并用onXX在父级监听

//子组件
...
this.fire('change')
...

// 父组件
...
render() {
  return(
    <div>
      <child-ele onChange={this.changeHandle.bind(this)}></child-ele>
    </div>
  )
}

祖孙组件通讯

跨域多个层级向下传递 props 有时非常麻烦,这个时候可以使用 provide 和 Inject 跨组件层级传递

define('parent-el', class extends WeElement {

  provide = {
    name: 'omi'
  }

  render() {
    return <child-el></child-el>
  }
})

//不仅仅是子,在任意子孙曾孙节点都可以使用 inject 来消费祖先节点的注入
define('child-el', class extends WeElement {

  inject = ['name']

  render() {
    //output: <div>omi</div>
    return <div>{this.injection.name}</div>
  }
})

兄弟组件通讯

兄弟组件通讯,通过使用mitt进行全局通讯 通过provide/inject,注册emitter,并在全局中使用

import mitt from 'mitt'
define('parent-el', class extends WeElement {

  const emitter = mitt()

  provide = {
    emitter: emitter
  }

  changeHandle() {
    ...
  }

  install() {
    emitter.on('change', this.changeHandle())
  }

  render() {
    return <child-el></child-el>
  }
})

define('child-el', class extends WeElement {

  inject = ['emitter']

  emit() {
    this.injection.emitter.emit('change')
  }
})

更新Update

update 方法是内置的重要核心方法,用于更新组件自身。比如:

this.update()

举个场景,比如点击弹出层的 mask 关闭弹出,在 react 中需要传递给父组件,让父组件更新,而 Omi 推崇自更新,这样 diff 的区域更小。

onMaskClick = ()=> {
  //修改 props
  this.props.show = false
  //防止父组件更新 diff 不出结果
  this.prevProps.show = false
  //更新,并且在 html 模式下忽略 attributes
  this.forceUpdate()
  //触发事件,可以通过这个更改外部的状态变量来保持一致性,但是外面的组件不用再更新
  this.fire('close')
}

也可以使用 updateProps 达到同样的效果:

onMaskClick = ()=> {
  //修改 props 并强制更新
  this.updateProps({
    show: false
  })
  //触发事件,可以通过这个更改外部的状态变量来保持一致性,但是外面的组件不用再更新
  this.fire('close')
}

如果不需要更新子组件,可以使用updateSelf方法

1.2.1-beta.3

4 months ago

1.2.1-beta.4

4 months ago

1.2.1-beta.2

4 months ago

1.2.1-beta.1

4 months ago

1.2.1-beta.0

4 months ago

1.2.0

4 months ago

1.2.0-beta.41

5 months ago

1.2.0-beta.40

5 months ago

1.2.0-beta.39

5 months ago

1.2.0-beta.38

5 months ago

1.2.0-beta.37

5 months ago

1.2.0-beta.36

5 months ago

1.2.0-beta.35

5 months ago

1.2.0-beta.34

5 months ago

1.2.0-beta.33

5 months ago

1.2.0-beta.30

5 months ago

1.2.0-beta.32

5 months ago

1.2.0-beta.31

5 months ago

1.2.0-beta.27

5 months ago

1.2.0-beta.29

5 months ago

1.2.0-beta.28

5 months ago

1.1.4-beta.1

7 months ago

1.1.4-beta.2

7 months ago

0.3.8-beta.1

8 months ago

0.3.0

8 months ago

1.1.4-beta.0

7 months ago

0.3.7-beta.1

8 months ago

1.1.4-beta.9

6 months ago

0.3.6

8 months ago

0.3.5

8 months ago

1.1.4-beta.7

7 months ago

1.1.4-beta.8

6 months ago

0.3.7

8 months ago

1.1.4-beta.5

7 months ago

0.3.2

8 months ago

1.1.4-beta.6

7 months ago

0.3.1

8 months ago

1.1.4-beta.3

7 months ago

0.3.4

8 months ago

1.1.4-beta.4

7 months ago

0.3.3

8 months ago

1.1.1

7 months ago

1.1.4

6 months ago

1.1.3

7 months ago

1.1.2

7 months ago

0.3.5-beta.10

8 months ago

0.3.5-beta.13

8 months ago

0.3.5-beta.12

8 months ago

1.2.0-beta.9

6 months ago

1.2.0-beta.8

6 months ago

1.2.0-beta.1

6 months ago

1.2.0-beta.0

6 months ago

1.2.0-beta.3

6 months ago

1.2.0-beta.2

6 months ago

1.2.0-beta.5

6 months ago

1.2.0-beta.4

6 months ago

1.2.0-beta.7

6 months ago

1.2.0-beta.6

6 months ago

0.3.5-beta.1

8 months ago

0.3.5-beta.2

8 months ago

0.3.5-beta.3

8 months ago

0.3.5-beta.4

8 months ago

0.3.5-beta.0

8 months ago

0.3.5-beta.9

8 months ago

0.3.5-beta.5

8 months ago

0.3.5-beta.6

8 months ago

0.3.5-beta.7

8 months ago

0.3.5-beta.8

8 months ago

1.2.0-beta.26

5 months ago

1.2.0-beta.23

5 months ago

1.2.0-beta.22

5 months ago

1.2.0-beta.25

5 months ago

1.2.0-beta.24

5 months ago

1.2.0-beta.21

5 months ago

1.2.0-beta.20

5 months ago

1.1.3-beta0

7 months ago

0.3.4-beta1

7 months ago

1.2.0-beta.16

6 months ago

1.2.0-beta.15

6 months ago

1.2.0-beta.18

6 months ago

1.2.0-beta.17

6 months ago

1.2.0-beta.12

6 months ago

1.2.0-beta.11

6 months ago

1.2.0-beta.14

6 months ago

1.2.0-beta.13

6 months ago

1.2.0-beta.10

6 months ago

0.2.1

9 months ago

0.2.0

10 months ago

0.2.7

9 months ago

0.2.6

9 months ago

0.2.9

9 months ago

0.2.8

9 months ago

0.2.3

9 months ago

1.2.0-beta.19

6 months ago

0.2.2

9 months ago

0.2.5

9 months ago

0.2.4

9 months ago

0.1.20

10 months ago

0.1.10

11 months ago

0.1.11

11 months ago

0.1.12

11 months ago

0.1.13

11 months ago

0.1.14

11 months ago

0.1.15

11 months ago

0.1.0

11 months ago

0.1.2

11 months ago

0.1.1

11 months ago

0.1.8

11 months ago

0.1.7

11 months ago

0.1.9

11 months ago

0.1.4

11 months ago

0.1.3

11 months ago

0.1.6

11 months ago

0.1.5

11 months ago

0.0.53

11 months ago

0.1.16

11 months ago

0.1.17

11 months ago

0.1.18

11 months ago

0.1.19

10 months ago

0.0.40

12 months ago

0.0.41

12 months ago

0.0.42

12 months ago

0.0.43

12 months ago

0.0.44

12 months ago

0.0.45

12 months ago

0.0.46

11 months ago

0.0.47

11 months ago

0.0.37

12 months ago

0.0.38

12 months ago

0.0.39

12 months ago

0.0.51

11 months ago

0.0.52

11 months ago

0.0.30

12 months ago

0.0.31

12 months ago

0.0.32

12 months ago

0.0.33

12 months ago

0.0.34

12 months ago

0.0.35

12 months ago

0.0.36

12 months ago

0.0.50

11 months ago

0.0.48

11 months ago

0.0.49

11 months ago

0.0.28

12 months ago

0.0.29

12 months ago

0.0.21

1 year ago

0.0.22

1 year ago

0.0.23

1 year ago

0.0.24

1 year ago

0.0.25

1 year ago

0.0.26

1 year ago

0.0.27

1 year ago

0.0.20

1 year ago