Store
define('my-first-element', class extends WeElement {
//You must declare data here for view updating
static get data() {
return { name: null }
}
onClick = () => {
//auto update the view
this.store.data.name = 'abc'
}
render(props, data, store) {
return (
<h1 onClick={this.onClick}>Hello, {store.data.name}!</h1>
)
}
})
const store = {
data: { name: 'Omi' }
}
render(<my-first-element name="world"></my-first-element>, 'body', store)
当非纯 Element 使用 store 体系时,static get data
就仅仅被用来声明依赖,举个例子:
static get data() {
return {
a: null,
b: null,
c: { d: [] },
e: []
}
}
会被转换成:
{
a: true,
b: true,
'c.d':true,
e: true
}
举例说明 Path 命中规则:
Proxy Path(由数据更改产生) | updatePath(定义在组件的静态data上) | 是否更新 |
---|---|---|
abc | abc | 更新 |
abc[1] | abc | 更新 |
abc.a | abc | 更新 |
abc | abc.a | 不更新 |
abc | abc[1] | 不更新 |
abc | abc[1].c | 不更新 |
abc.b | abc.b | 更新 |
以上只要命中一个条件就可以进行更新!
总结就是只要等于 updatePath 或者在 updatePath 子节点下都进行更新!
看可以看到 store 体系是中心化的体系?那么怎么做到部分组件去中心化?为自定义元素加上静态属性 pure 并设置为 ture:
static pure = true
纯元素!不会注入 store!