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;
}
//....
}