UNPKG

1.07 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._controller = this;
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 get controller() {
42 return this.props.controller || this._controller;
43 }
44}
45