import React, { Component } from "react";
import { View, Text } from "react-native";
var globalID = 0;
//@ts-ignore
function observable(obj) {
var oID = ++globalID;
return new Proxy(obj, {
get: function(target, key, receiver) {
//@ts-ignore
collect.startCollect(oID + "" + key);
return Reflect.get(target, key, receiver);
},
//@ts-ignore
set: function(target, key, value, receiver) {
Reflect.set(target, key, value, receiver);
//@ts-ignore
collection[oID + "" + key] && collection[oID + "" + key].forEach(c => {
c();
if($render && $forceUpdate){
$render()
$forceUpdate()
}
});
}
});
}
var collection = {};
var collect = {
//@ts-ignore
begin: function(handler) {
//@ts-ignore
collection.handler = handler;
//@ts-ignore
collection.now = true;
},
//@ts-ignore
startCollect: function(oIDKey) {
//@ts-ignore
if (collection.now) {
//@ts-ignore
if (collection[oIDKey]) {
//@ts-ignore
collection[oIDKey].push(collection.handler);
} else {
//@ts-ignore
collection[oIDKey] = [collection.handler];
}
}
},
end: function() {
//@ts-ignore
collection.now = false;
}
};
let $render: any
let $forceUpdate: any
//@ts-ignore
function observableRender(handler) {
collect.begin(handler);
handler();
collect.end();
//@ts-ignore
return function(tag){
tag.prototype.componentWillMount = function() {
$render = this.render.bind(this);
$forceUpdate = this.forceUpdate.bind(this);
}
return tag
}
}
var obj = observable({
a: 0,
});
setInterval(()=>{
obj.a = Math.random()
},100)
@observableRender(() => {
obj.a;
})
class App extends Component {
scrollView: any;
currIndex: number;
timer: any;
state = {
hide: true
};
render() {
return (
<View>
<Text>数值变化渲染::{obj.a}</Text>
</View>
);
}
}
export default App;
2019-11-15
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 【早盘核心概念】 1.折叠屏手机市场再添新军,行业有望加速爆发:【中石科技(300684)、股吧】、水晶光电、东睦...
- 在深圳这样一个追求快速、高效的一线城市,工作节奏快、工作压力大,几乎成了大多数人的常态,人们似乎已经将加班文化视为...