I have the next problem/question in React Native:
I have the next class, let’s say it A
that looks like this:
export default class A {
static shared = A.shared || new A()
constructor() {
console.log('in constructor')
testFunction()
}
testFunction = () => {
console.log('in test function')
}
testFunction2 = () => {
console.log('in test function 2')
}
}
My A
class in used in B
class like this:
export default class B {
static shared = B.shared || new B()
makeAPIRequest = (parameters, valueCallback, errorCallback) => {
console.log('in B req')
A.shared.testFunction2()
}
}
And the makeApiRequest
function from B
class in used in App.js
like this:
const makeRequest = () => {
B.shared.makeAPIRequest(parameters, responseCallback => {
// do logic here...
}, errorCallback => {
// do logic here
})
}
And this makeRequest
function is placed as an onPress
action.
My question is:
At the first render of the app, my constructor
console.log and called function console.log are printed in terminal. Shouldn’t this happen just before I call the makeRequest
function is App.js
that calls the makeAPIRequest
from B
class that instantiate the A
class?
If someone can explain me the logic behind this, will be pretty appreciated.
Advertisement
Answer
A
is instantiated as static dependency of itself so basically that happens just after class is loaded, if you want to make it lazy instantiated you need to do something like:
class A {
static get shared() {
if (!this.__instance) {
this.__instance = new this();
}
return this.__instance;
}
//....
}