2017-03-12 6 views
0

ケイアの値のペアから反応するネイティブのピッカー要素のキー値を設定しようとしています。キー値リストを渡そうとするとアプリがクラッシュします。例えばjavacriptマップを使用してキー値のペアを読み取っているときにエラーが発生しました。ピッカーをネイティブに反応させます。

:(これは動作しません)私はキーと値のペアなしで配列を渡す場合にのみ動作しますしかし

-- In the constructor 
stateList: [{1:'Fortsworth'},{2:'Chicago'}], 

--In the render() 
this.state.stateList.map((s, i) => { 
    console.log('key='+i+',value='+s); 
    return <Picker.Item key={i} value={s} label={s} /> 
}); 

。以下のコードが動作します。

-- In the constructor 
stateList: ['Fortsworth','Chicago'], 

--In the render() 
this.state.stateList.map((s, i) => { 
    console.log('key='+i+',value='+s); 
    return <Picker.Item key={i} value={s} label={s} /> 
}); 

ピッカーにキーを "1"として渡し、値を "Fortsworth"として渡す必要があります。あなたの入力を感謝します。

+0

両方のスニペットは同じ... – Pineda

+0

sorry..mybad現在..今質問を更新しました。ここで動作していないstatelistは、マップです。ここでは2番目の例の配列として –

答えて

1

これは、この行うには私の知っている唯一の方法である:基本的に

Object.keys(this.state.stateList).map(function(key) { 
    let value = this.state.stateList[key]; 
    console.log('key=' + key + ',value=' + value); 
    return <Picker.Item key={key} value={value} label={value} /> 
} 

を、あなたは、キーのリストをループし、そのキーを使用して、マップから値を引いています。

誰かがもっと良い解決策を持っていれば、私はこれについても興味があるので、是非回答として提供してください。

EDIT

申し訳ありませんが、あなたがマップエントリのリストを持っているだけで実現。私の答えのために、あなたがマップするstateListが必要になります。これは、あなたにいくつかのアイデアを与える必要があり

stateList: {1:'Fortsworth', 2:'Chicago'}

+0

ありがとうございます。 "let value = this.state.stateList [key]" throwed "undefinedはオブジェクトエラーではありません"。リストを別のマップオブジェクトに保存し、新しいマップから値を取得しました。それは問題を解決した.. –

0

-

var states = [{'1': 'Fortsworth'}, {'2': 'Chicago'}]; 
var key = ''; 

states.map(s => { 
    key = Object.keys(s)[0]; 
    console.log("key",key,"value",s[key]); 
}); 
関連する問題