리액트 네이티브 picker.item 추가 관련 질문입니다.

조회수 453회

서버에서 db값을 가져와서 리액트네이티브 picker에 추가하고자 합니다.

import React, {Component} from 'react';
import {View, Picker} from 'react-native';
import axios from 'axios'

class INPUT extends Component{
    constructor(props){
        super(props)
        this.arr = []
        axios.get('http://beam1100.cafe24app.com/input').then((res)=>{
            for(var i in res.data.results){
                var results = res.data.results
                this.arr.push(<Picker.Item key={results[i].num} value={results[i].name} label={results[i].name}/>)
            }
        })
    }

    render(){
        return(
            <View>
                <Picker>
                    {this.arr}
                </Picker>
            </View>
        )
    }
}

export default INPUT

가져온 db 배열은 다음과 같습니다.

Array [

Object { "name": "벤치프레스", "num": 1, },

Object { "name": "스쿼트", "num": 2, },

Object { "name": "데드리프트", "num": 3, },

]

아무런 오류도 뜨지 않고 추가가 안됩니다. 왜이럴까요?

1 답변

  • 
    class INPUT extends Component{
    
        constructor(props){
            super(props)
    
            this.state={
                arr:[],
                selected:null
            }
    
            axios.get('http://beam1100.cafe24app.com/input')
            .then((res)=>{
                var results = res.data.results
                for(var i in results){
                    var picker = < Picker.Item key={results[i].num} value={results[i].name} label={results[i].name}/>
                    this.setState({arr:this.state.arr.concat(picker)});
                }
            })
        }
    
        render(){
            return(
                <View>
                    <Picker
                        selectedValue={this.state.selected}
                        onValueChange={(e)=>{
                            this.setState({selected:e})
                        }}
                    >
                        {this.state.arr}
                    </Picker>
                </View>
            )
        }
    }
    

    state를 이용해서 수정하기는 했지만,

    리액트 사이클에 따르면 constructor가 끝난 후 render가 실행되는 것으로 아는데요, 왜 this.변수를 이용해서 constructor에서 render로 빈 배열이 전달되는지 모르겠습니다. 아시는 분 계신가요?

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)