当前框架是基于tsx
和proxy
的响应式框架
组件内部Data,可以直接通过类属性定义, 组件内部可以响应式监听Data
computed属性可以直接通过get
和set
挂载计算属性
以通过@watch
修饰符添加监听属性
@watch("checkBoxChecked")
handleCheck(newVal, oldVal){
console.log(`newVal: ${newVal}, oldVal: ${oldVal}`);
}
@watch
方法中传递的是监听的值,在组建初始化时,根据装饰器收集当前组件所有的watch
属性,然后在父类Control
的构造函数中初始化所有watch
model
分为输入控件的自动model
,以及自定义组件定义的model
model
可以的在组件/控件响应式的变更传入的值
组件通过model
关键词对组件进行双向绑定(目前支持的有input
,radio
,checkbox
)
<input model="inputValue">
通过model
\ value
参数传递到props.value
属性,如果使用model
则内部值内部变化后, 组件外部会自动变化, 如果使用value
则在组件内部发生变化无法继续向组件外部传递
<CheckBoxGroup model="checkBoxChecked" >
<Checkbox label="true选项"></Checkbox>
<Checkbox label="false选项"></Checkbox>
<Checkbox label="disable选项"></Checkbox>
</CheckBoxGroup>
Control
实例中存在readonly $refs
参数,可用于存储当前组件内部的组件实例。
<Menu ref={this.addRefs("menu")} defaultActive="1-1" onSelect={this.handleSelect}>
<SubMenu index="1" title="导航一">
<MenuItem index="1-1"><i className="iconfont icon-loading"></i> 我的工作台</MenuItem>
</SubMenu>
<SubMenu index="2" title="导航二">
<MenuItem index="1-3" disabled>消息中心</MenuItem>
</SubMenu>
</Menu>
目前ref
中固定语法为{this.addRefs("xxx")}
,xxx
表示通过this.$refs.xxx
来获取组件实例,并且可以调用组件中定义的属性以及方法
定义组件通过主动继承Control
并且添加了@Component
类修饰符的类来实现
@Component
class Button extends Control {
...
}
每个组件都继承自Control
,Control
接受一个类型,作为props
的类型
interface IButtonProps extends IBaseComponent {
disabled?: boolean,
loading?: boolean
}
@Component
class Button extends Control<IButtonProps> {
}
这样在使用Button
组件时,会自动提示定义的IButtonProps
中的属性
<Button onClick={this.handleClick} disabled={this.buttonDisable}>this is a button</Button>
父组件通过attribute
向子组件传值,子组件通过this.props.xxx
访问父组件传进来的值, 当父组件传递的值发生变化时, 子组件会响应式的更新
组件的数据传递是单向的,除了model
参数之外,其余参数在子组件内部发生变化,不会响应式更新到父组件,也不会响应式更新子组件内容
<Button onClick={this.emitDone} type="success">{this.buttonTitle}</Button>
attribute
基于tsx
的形式,可以向子组件传递变量
实例初始化后被调用
实例创建完成后被调用
组件挂载前事件
组件挂载后的事件
组件销毁前事件
组件销毁后事件
组件更新前将被调用
组件更新后调用