@@ -31,30 +31,29 @@ function invariant(condition, message) {
3131
3232React . PureComponent . prototype . componentDidMount = function ( ) { } ;
3333
34- React . Component . prototype . componentDidMount = function ( ) { } ; //TODO - polyfill
35-
34+ React . Component . prototype . componentDidMount = function ( ) { } ;
3635
3736invariant ( typeof Symbol === 'function' && Symbol [ "for" ] , 'react-class-hooks needs Symbols!' ) ; // Separate objects for better debugging.
3837
3938var MAGIC_STATES = Symbol [ "for" ] ( 'magicStates' ) ;
4039var MAGIC_EFFECTS = Symbol [ "for" ] ( 'magicEffects' ) ;
4140var MAGIC_MEMOS = Symbol [ "for" ] ( 'magicMemos' ) ;
4241var MAGIC_REFS = Symbol [ "for" ] ( 'magicRefs' ) ;
43- var MAGIC_STACKS = Symbol [ "for" ] ( 'magicStacks' ) ; //React 15.3.2 support + Polyfill
42+ var MAGIC_STACKS = Symbol [ "for" ] ( 'magicStacks' ) ;
43+ var ReactInternals = React . __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED ; // React 15.3.2 support + Polyfill
4444
4545var instanceKey = React . version . indexOf ( '16' ) === 0 ? 'stateNode' : '_instance' ;
4646
4747if ( React . version . indexOf ( '15' ) === 0 ) {
48- invariant ( React . __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED , 'Please for React ^15.3.2 - 15.6.2 import "react-class-hooks/poly15" in your root index.js!' ) ;
48+ invariant ( ReactInternals , 'Please for React ^15.3.2 - 15.6.2 import "react-class-hooks/poly15" in your root index.js!' ) ;
4949}
5050
5151function getMagicSelf ( ) {
52- invariant ( React . __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED . ReactCurrentOwner . current , 'You are using Hooks outside of "render" React.Component Method!' ) ;
53- return React . __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED . ReactCurrentOwner . current [ instanceKey ] ;
52+ invariant ( ReactInternals . ReactCurrentOwner . current , 'You are using Hooks outside of "render" React.Component Method!' ) ;
53+ return ReactInternals . ReactCurrentOwner . current [ instanceKey ] ;
5454}
5555var getMagicDispatcher = function getMagicDispatcher ( ) {
56- var s = React . __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED ;
57- return s . ReactCurrentDispatcher . current ;
56+ return ReactInternals . ReactCurrentDispatcher . current ;
5857} ;
5958function checkSymbol ( name , keySymbol ) {
6059 invariant ( _typeof ( keySymbol ) === 'symbol' , "" . concat ( name , " - Expected a Symbol for key!" ) ) ;
@@ -67,12 +66,12 @@ function MagicStack(StackName) {
6766 var _this = this ;
6867
6968 this . name = StackName ;
70- this . symbol = Symbol ( "" . concat ( this . name , ".Stack" ) ) ;
71- this . cleanSymbol = Symbol ( "" . concat ( this . name , ".Stack.Cleaner" ) ) ;
69+ this . symbol = Symbol ( "" . concat ( this . name , ".Stack" ) ) ; // this.cleanSymbol = Symbol(`${this.name}.Stack.Cleaner`);
70+
7271 this . keys = [ ] ;
7372
7473 this . getKey = function ( stackIndex ) {
75- var len = _this . keys . length ; //create if not exist
74+ var len = _this . keys . length ; // create if not exist
7675
7776 if ( stackIndex > len ) {
7877 for ( var i = len ; i < stackIndex ; i += 1 ) {
@@ -84,26 +83,25 @@ function MagicStack(StackName) {
8483 } ;
8584}
8685function useMagicStack ( magicStack , hook ) {
87- //inject next renders stack counter cleaner
86+ // inject next renders stack counter cleaner
8887 var self = getMagicSelf ( ) ;
8988
9089 if ( ! self [ MAGIC_STACKS ] ) {
9190 self [ MAGIC_STACKS ] = { } ;
92-
93- var _render = self . render . bind ( self ) ;
91+ var renderFunc = self . render . bind ( self ) ;
9492
9593 self . render = function ( ) {
9694 Object . getOwnPropertySymbols ( self [ MAGIC_STACKS ] ) . forEach ( function ( k ) {
9795 self [ MAGIC_STACKS ] [ k ] = 0 ;
9896 } ) ;
99- return _render . apply ( void 0 , arguments ) ;
97+ return renderFunc . apply ( void 0 , arguments ) ;
10098 } ;
101- } //stack counter init
99+ } // stack counter init
102100
103101
104102 if ( ! self [ MAGIC_STACKS ] [ magicStack . symbol ] ) {
105103 self [ MAGIC_STACKS ] [ magicStack . symbol ] = 0 ;
106- } //stack counter update
104+ } // stack counter update
107105
108106
109107 self [ MAGIC_STACKS ] [ magicStack . symbol ] += 1 ;
@@ -136,9 +134,9 @@ function createNamedHook(name, hook) {
136134 */
137135function useClassStateKey ( keySymbol , initialValue ) {
138136 checkSymbol ( 'useClassStateKey' , keySymbol ) ;
139- var self = getMagicSelf ( ) ; //first time Render && first Hook
137+ var self = getMagicSelf ( ) ; // first time Render && first Hook
140138
141- if ( ! self [ MAGIC_STATES ] ) self [ MAGIC_STATES ] = { } ; //first time Render -> assign initial Value and create Setter
139+ if ( ! self [ MAGIC_STATES ] ) self [ MAGIC_STATES ] = { } ; // first time Render -> assign initial Value and create Setter
142140
143141 if ( ! self [ MAGIC_STATES ] . hasOwnProperty ( keySymbol ) ) {
144142 self [ MAGIC_STATES ] [ keySymbol ] = {
@@ -177,7 +175,7 @@ useClassState.createStack = function (stackName) {
177175} ;
178176
179177function inputsArrayEqual ( inputs , prevInputs ) {
180- invariant ( inputs . length === prevInputs . length , 'Hooks inputs array length should be constant between renders!' ) ; //Object.is polyfill
178+ invariant ( inputs . length === prevInputs . length , 'Hooks inputs array length should be constant between renders!' ) ; // Object.is polyfill
181179
182180 for ( var i = 0 ; i < inputs . length ; i += 1 ) {
183181 var val1 = inputs [ i ] ;
@@ -200,10 +198,10 @@ var useClassEffectKey = function useClassEffectKey(keySymbol, creator, inputs) {
200198 checkSymbol ( 'useClassEffect' , keySymbol ) ;
201199 invariant ( typeof creator === 'function' , 'Creator should be a function!' ) ;
202200 invariant ( ! inputs || Array . isArray ( inputs ) , 'inputs should be an array!' ) ;
203- var self = getMagicSelf ( ) ; //create MAGIC_EFFECTS if not exists
201+ var self = getMagicSelf ( ) ; // create MAGIC_EFFECTS if not exists
204202
205- if ( ! self [ MAGIC_EFFECTS ] ) self [ MAGIC_EFFECTS ] = { } ; //First Render -> Assign creator, inputs and inject methods
206- //TODO didCatch
203+ if ( ! self [ MAGIC_EFFECTS ] ) self [ MAGIC_EFFECTS ] = { } ; // First Render -> Assign creator, inputs and inject methods
204+ // TODO didCatch
207205
208206 if ( ! self [ MAGIC_EFFECTS ] . hasOwnProperty ( keySymbol ) ) {
209207 self [ MAGIC_EFFECTS ] [ keySymbol ] = {
@@ -212,34 +210,34 @@ var useClassEffectKey = function useClassEffectKey(keySymbol, creator, inputs) {
212210 } ;
213211
214212 if ( ! onlyDidUpdate ) {
215- //inject componentDidMount
213+ // inject componentDidMount
216214 var didMount = typeof self . componentDidMount === 'function' ? self . componentDidMount . bind ( self ) : undefined ;
217215
218216 self . componentDidMount = function ( ) {
219217 if ( didMount ) didMount ( ) ;
220- self [ MAGIC_EFFECTS ] [ keySymbol ] . cleaner = self [ MAGIC_EFFECTS ] [ keySymbol ] . creator ( ) ; //save last executed inputs
218+ self [ MAGIC_EFFECTS ] [ keySymbol ] . cleaner = self [ MAGIC_EFFECTS ] [ keySymbol ] . creator ( ) ; // save last executed inputs
221219
222220 self [ MAGIC_EFFECTS ] [ keySymbol ] . prevInputs = self [ MAGIC_EFFECTS ] [ keySymbol ] . inputs ;
223221 invariant ( ! self [ MAGIC_EFFECTS ] [ keySymbol ] . cleaner || typeof self [ MAGIC_EFFECTS ] [ keySymbol ] . cleaner === 'function' , 'useClassEffect return (Effect Cleaner) should be Function or Void !' ) ;
224222 } ;
225- } //inject componentDidUpdate
223+ } // inject componentDidUpdate
226224
227225
228226 var didUpdate = typeof self . componentDidUpdate === 'function' ? self . componentDidUpdate . bind ( self ) : undefined ;
229227
230228 self . componentDidUpdate = function ( ) {
231- if ( didUpdate ) didUpdate . apply ( void 0 , arguments ) ; //execute if no inputs || inputs array has values and values changed
229+ if ( didUpdate ) didUpdate . apply ( void 0 , arguments ) ; // execute if no inputs || inputs array has values and values changed
232230
233231 var execute = ! self [ MAGIC_EFFECTS ] [ keySymbol ] . inputs || ! inputsArrayEqual ( self [ MAGIC_EFFECTS ] [ keySymbol ] . inputs , self [ MAGIC_EFFECTS ] [ keySymbol ] . prevInputs ) ;
234232
235233 if ( execute ) {
236234 if ( typeof self [ MAGIC_EFFECTS ] [ keySymbol ] . cleaner === 'function' ) self [ MAGIC_EFFECTS ] [ keySymbol ] . cleaner ( ) ;
237- self [ MAGIC_EFFECTS ] [ keySymbol ] . cleaner = self [ MAGIC_EFFECTS ] [ keySymbol ] . creator ( ) ; //save last executed inputs!
235+ self [ MAGIC_EFFECTS ] [ keySymbol ] . cleaner = self [ MAGIC_EFFECTS ] [ keySymbol ] . creator ( ) ; // save last executed inputs!
238236
239237 self [ MAGIC_EFFECTS ] [ keySymbol ] . prevInputs = self [ MAGIC_EFFECTS ] [ keySymbol ] . inputs ;
240238 invariant ( ! self [ MAGIC_EFFECTS ] [ keySymbol ] . cleaner || typeof self [ MAGIC_EFFECTS ] [ keySymbol ] . cleaner === 'function' , 'useClassEffect return (Effect Cleaner) should be Function or Void !' ) ;
241239 }
242- } ; //inject componentWillUnmount
240+ } ; // inject componentWillUnmount
243241
244242
245243 var unmount = typeof self . componentWillUnmount === 'function' ? self . componentWillUnmount . bind ( self ) : undefined ;
@@ -249,7 +247,7 @@ var useClassEffectKey = function useClassEffectKey(keySymbol, creator, inputs) {
249247 if ( typeof self [ MAGIC_EFFECTS ] [ keySymbol ] . cleaner === 'function' ) self [ MAGIC_EFFECTS ] [ keySymbol ] . cleaner ( ) ;
250248 } ;
251249 } else {
252- //next renders
250+ // next renders
253251 self [ MAGIC_EFFECTS ] [ keySymbol ] . creator = creator ;
254252 self [ MAGIC_EFFECTS ] [ keySymbol ] . inputs = inputs ;
255253 }
@@ -272,9 +270,9 @@ var useClassMemoKey = function useClassMemoKey(keySymbol, creator, inputs) {
272270 checkSymbol ( 'useClassMemo' , keySymbol ) ;
273271 invariant ( typeof creator === 'function' , 'Creator should be a function!' ) ;
274272 invariant ( ! inputs || Array . isArray ( inputs ) , 'inputs should be an array!' ) ;
275- var self = getMagicSelf ( ) ; //create magic Memos if not exists
273+ var self = getMagicSelf ( ) ; // create magic Memos if not exists
276274
277- if ( ! self [ MAGIC_MEMOS ] ) self [ MAGIC_MEMOS ] = { } ; //First Render -> assign creator, inputs, value
275+ if ( ! self [ MAGIC_MEMOS ] ) self [ MAGIC_MEMOS ] = { } ; // First Render -> assign creator, inputs, value
278276
279277 if ( ! self [ MAGIC_MEMOS ] . hasOwnProperty ( keySymbol ) ) {
280278 self [ MAGIC_MEMOS ] [ keySymbol ] = {
@@ -283,7 +281,7 @@ var useClassMemoKey = function useClassMemoKey(keySymbol, creator, inputs) {
283281 value : creator ( )
284282 } ;
285283 } else {
286- //next renders
284+ // next renders
287285 var execute = false ;
288286
289287 if ( ! inputs ) {
@@ -359,9 +357,9 @@ useClassReducer.create = function (name) {
359357 */
360358function useClassRefKey ( keySymbol , initialValue ) {
361359 checkSymbol ( 'useClassRefKey' , keySymbol ) ;
362- var self = getMagicSelf ( ) ; //first time Render && first Hook
360+ var self = getMagicSelf ( ) ; // first time Render && first Hook
363361
364- if ( ! self [ MAGIC_REFS ] ) self [ MAGIC_REFS ] = { } ; //first time Render -> assign initial Value
362+ if ( ! self [ MAGIC_REFS ] ) self [ MAGIC_REFS ] = { } ; // first time Render -> assign initial Value
365363
366364 if ( ! self [ MAGIC_REFS ] . hasOwnProperty ( keySymbol ) ) {
367365 var ref = {
@@ -385,7 +383,7 @@ useClassRef.create = function (name) {
385383
386384useClassRef . createStack = function ( stackName ) {
387385 return createHook ( stackName , useClassRefKey ) ;
388- } ; //poly 15 ref
386+ } ; // poly 15 ref
389387
390388
391389var refCallback = function refCallback ( refObject ) {
@@ -397,15 +395,11 @@ var refCallback = function refCallback(refObject) {
397395/**
398396 * https://github.com/salvoravida/react-class-hooks
399397 */
400- var useClassContextKey = function useClassContextKey ( keySymbol , Context ) {
401- checkSymbol ( 'useClassContext' , keySymbol ) ;
402- invariant ( Context && Context . Provider && Context . Consumer , 'Context should be React.createContext object!' ) ;
403- return getMagicDispatcher ( ) . readContext ( Context ) ;
404- } ;
405- var useClassContext = createHook ( 'Contexts' , useClassContextKey ) ;
398+ var useClassContext = function useClassContext ( context , observedBits ) {
399+ getMagicSelf ( ) ; // invariant hook outside render method
406400
407- useClassContext . create = function ( name ) {
408- return createNamedHook ( name , useClassContextKey ) ;
401+ invariant ( context && context . Provider && context . Consumer , 'Context should be React.createContext object!' ) ;
402+ return getMagicDispatcher ( ) . readContext ( context , observedBits ) ;
409403} ;
410404
411405function useClassImperativeHandle ( ref , create , deps ) {
0 commit comments