Victor
Victor

Reputation: 5

issue refer to scope of variable

how to get variable from outer layer method

trying to use a variable in outer layer in my React-Native App

updateCheckBox() {
        Constants.TABS.map((item) => {//Constants.TABS is an array
                AsyncStorage.getItem(item)//using item as key to fetch from AsyncStorage
                .then((res) => {
                    if(res == 1) {
                        //debugged here, item was undeined. but i need setState here with item as key. How should i get item here.
                        this.setState({item: true}) // I need to get the item here, but it show undefined
                    } else {
                        this.setState({item:false}) // I need to get the item here, but it show undefined
                    } 
                })
        })
    }

// I need to get the item here, but it show undefined

Upvotes: 0

Views: 33

Answers (2)

Victor
Victor

Reputation: 5

finally, I found there is no issue in this code, the thing is

updateCheckBox() {
    Constants.TABS.map((item) => {
            let key = item
            AsyncStorage.getItem(key)
            .then((res) => {
                console.log(item, "item is here", res); //item is  visible here
                console.log(key) //key is all always undefined 
                if(res == 1) {
                    this.setState({item: true}) 
                } else {
                    this.setState({item:false}) 
                } 
            })
    })
}

key is not visible in method then, which I can not explain, but all in all, my code works.

Upvotes: 0

thecodrr
thecodrr

Reputation: 275

You need to wrap the item in [] to use it as a key for a property. Like this:

updateCheckBox() {
        Constants.TABS.map(item => {
                AsyncStorage.getItem(key) //
                .then((res) => {
                    //item is accessible here, to use item as the key to a property wrap it in [] 
                    if(res == 1) {
                        this.setState({[item]: true});
                    } else {
                        this.setState({[item]: false});
                    } 
                })
        })
    }

Upvotes: 1

Related Questions