UNPKG

1.29 kBJavaScriptView Raw
1import React from 'react';
2import ReactLink from 'react/lib/ReactLink';
3import ReactStateSetters from 'react/lib/ReactStateSetters';
4
5
6export class BaseComponent extends React.Component {
7 constructor(...args) {
8 super(...args);
9 this._delegate = null;
10 }
11
12 linkState(key) {
13 return new ReactLink(
14 this.state[key], ReactStateSetters.createStateKeySetter(this, key)
15 );
16 }
17
18 setStateFromObject(obj) {
19 var state = {};
20
21 var proto = Reflect.getPrototypeOf(obj);
22 var hasMethods = false;
23 for (let name of Reflect.ownKeys(proto)) {
24 if (Reflect.getOwnPropertyDescriptor(proto, name).get) {
25 state[name] = obj[name];
26 hasMethods = true;
27 }
28 }
29
30 if (!hasMethods) {
31 var protoBase = Reflect.getPrototypeOf(proto);
32 for (let name of Reflect.ownKeys(protoBase)) {
33 if (Reflect.getOwnPropertyDescriptor(protoBase, name).get) {
34 state[name] = obj[name];
35 }
36 }
37 }
38 this.setState(state);
39 }
40
41 set delegate(value) {
42 this._delegate = value;
43 this.props.delegate = value;
44 }
45
46 get delegate() {
47 if (this._delegate !== this.props.delegate) {
48 this._delegate = this.props.delegate;
49 }
50 if (!this._delegate) {
51 this._delegate = this;
52 }
53 return this._delegate;
54 }
55}