1.2.0 • Published 8 months ago

@blueking/bk-query-component v1.2.0

Weekly downloads
-
License
-
Repository
-
Last release
8 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.13

9 months ago

1.2.1-beta.12

9 months ago

1.2.1-beta.15

8 months ago

1.2.1-beta.14

9 months ago

1.2.1-beta.17

8 months ago

1.2.1-beta.16

8 months ago

1.2.1-beta.18

8 months ago

1.2.1-beta.11

9 months ago

1.2.1-beta.10

9 months ago

1.2.1-beta.9

9 months ago

1.2.1-beta.8

10 months ago

1.2.0-beta.42

10 months ago

1.1.4-beta.11

10 months ago

1.1.4-beta.12

10 months ago

1.1.4-beta.13

10 months ago

1.1.4-beta.14

10 months ago

1.2.2

10 months ago

1.2.1-beta.5

10 months ago

1.2.1-beta.6

10 months ago

1.2.1-beta.7

10 months ago

1.2.1-beta.3

1 year ago

1.2.1-beta.4

1 year ago

1.2.1-beta.2

1 year ago

1.2.1-beta.1

1 year ago

1.2.1-beta.0

1 year ago

1.2.0

1 year ago

1.2.0-beta.41

2 years ago

1.2.0-beta.40

2 years ago

1.2.0-beta.39

2 years ago

1.2.0-beta.38

2 years ago

1.2.0-beta.37

2 years ago

1.2.0-beta.36

2 years ago

1.2.0-beta.35

2 years ago

1.2.0-beta.34

2 years ago

1.2.0-beta.33

2 years ago

1.2.0-beta.30

2 years ago

1.2.0-beta.32

2 years ago

1.2.0-beta.31

2 years ago

1.2.0-beta.27

2 years ago

1.2.0-beta.29

2 years ago

1.2.0-beta.28

2 years ago

1.1.4-beta.1

2 years ago

1.1.4-beta.2

2 years ago

0.3.8-beta.1

2 years ago

0.3.0

2 years ago

1.1.4-beta.0

2 years ago

0.3.7-beta.1

2 years ago

1.1.4-beta.9

2 years ago

0.3.6

2 years ago

0.3.5

2 years ago

1.1.4-beta.7

2 years ago

1.1.4-beta.8

2 years ago

0.3.7

2 years ago

1.1.4-beta.5

2 years ago

0.3.2

2 years ago

1.1.4-beta.6

2 years ago

0.3.1

2 years ago

1.1.4-beta.3

2 years ago

0.3.4

2 years ago

1.1.4-beta.4

2 years ago

0.3.3

2 years ago

1.1.1

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

0.3.5-beta.10

2 years ago

0.3.5-beta.13

2 years ago

0.3.5-beta.12

2 years ago

1.2.0-beta.9

2 years ago

1.2.0-beta.8

2 years ago

1.2.0-beta.1

2 years ago

1.2.0-beta.0

2 years ago

1.2.0-beta.3

2 years ago

1.2.0-beta.2

2 years ago

1.2.0-beta.5

2 years ago

1.2.0-beta.4

2 years ago

1.2.0-beta.7

2 years ago

1.2.0-beta.6

2 years ago

0.3.5-beta.1

2 years ago

0.3.5-beta.2

2 years ago

0.3.5-beta.3

2 years ago

0.3.5-beta.4

2 years ago

0.3.5-beta.0

2 years ago

0.3.5-beta.9

2 years ago

0.3.5-beta.5

2 years ago

0.3.5-beta.6

2 years ago

0.3.5-beta.7

2 years ago

0.3.5-beta.8

2 years ago

1.2.0-beta.26

2 years ago

1.2.0-beta.23

2 years ago

1.2.0-beta.22

2 years ago

1.2.0-beta.25

2 years ago

1.2.0-beta.24

2 years ago

1.2.0-beta.21

2 years ago

1.2.0-beta.20

2 years ago

1.1.3-beta0

2 years ago

0.3.4-beta1

2 years ago

1.2.0-beta.16

2 years ago

1.2.0-beta.15

2 years ago

1.2.0-beta.18

2 years ago

1.2.0-beta.17

2 years ago

1.2.0-beta.12

2 years ago

1.2.0-beta.11

2 years ago

1.2.0-beta.14

2 years ago

1.2.0-beta.13

2 years ago

1.2.0-beta.10

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.2.7

2 years ago

0.2.6

2 years ago

0.2.9

2 years ago

0.2.8

2 years ago

0.2.3

2 years ago

1.2.0-beta.19

2 years ago

0.2.2

2 years ago

0.2.5

2 years ago

0.2.4

2 years ago

0.1.20

2 years ago

0.1.10

2 years ago

0.1.11

2 years ago

0.1.12

2 years ago

0.1.13

2 years ago

0.1.14

2 years ago

0.1.15

2 years ago

0.1.0

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.8

2 years ago

0.1.7

2 years ago

0.1.9

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.0.53

2 years ago

0.1.16

2 years ago

0.1.17

2 years ago

0.1.18

2 years ago

0.1.19

2 years ago

0.0.40

2 years ago

0.0.41

2 years ago

0.0.42

2 years ago

0.0.43

2 years ago

0.0.44

2 years ago

0.0.45

2 years ago

0.0.46

2 years ago

0.0.47

2 years ago

0.0.37

2 years ago

0.0.38

2 years ago

0.0.39

2 years ago

0.0.51

2 years ago

0.0.52

2 years ago

0.0.30

2 years ago

0.0.31

2 years ago

0.0.32

2 years ago

0.0.33

2 years ago

0.0.34

2 years ago

0.0.35

2 years ago

0.0.36

2 years ago

0.0.50

2 years ago

0.0.48

2 years ago

0.0.49

2 years ago

0.0.28

2 years ago

0.0.29

2 years ago

0.0.21

2 years ago

0.0.22

2 years ago

0.0.23

2 years ago

0.0.24

2 years ago

0.0.25

2 years ago

0.0.26

2 years ago

0.0.27

2 years ago

0.0.20

2 years ago