2017-08-22 3 views
0

React Nativeで問題が発生していますが、これはReact Nativeで問題が発生しています。すべての "キー"。笑「オブジェクトではない値の要求されたキー」JSONとReact Native

まず、これは私のJSONの構造である:

{ "Spot[]": [ 
{"id":1,"name": "Relais Villenus"}, 
{"id":2, "name": "Random"} 
]} 

私がこれまでJSONの多くで動作するように取得していないが、彼らはこのようなことはありませんでしたし、それは私を失いました!

私のクラスには、データを要求:

dataSource: ds.cloneWithRows(responseJson), 

class ListScreen extends Component{ 
static navigationOptions = { 
    tabBarLabel: 'Liste', 
}; 

constructor(props) { 
    super(props); 
    this.state = { 
    isLoading: true 
    } 
} 

componentDidMount() { 
    return fetch(REQUEST_URL) 
    .then((response) => response.json()) 
    .then((responseJson) => { 
     let ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 
     this.setState({ 
     isLoading: false, 
     dataSource: ds.cloneWithRows(responseJson.Spot), 
     }); 
    }) 
    .catch((error) => { 
     console.error(error); 
    }); 
} 

render() { 
    if (this.state.isLoading) { 
    return (
     <View style={{flex: 1, paddingTop: 20}}> 
     <ActivityIndicator /> 
     </View> 
    ); 
    } 

    return (
    <View style={{flex: 1, paddingTop: 20}}> 
     <ListView 
     dataSource={this.state.dataSource} 
     renderRow={(rowData) => <Text>{rowData.name}</Text>} 
     /> 
    </View> 
); 
} 
} 

は私が

dataSource: ds.cloneWithRows(responseJson.Spot[]), 

ようまたはこのようGitHubの私がここで何を読んでかに基づいて異なるものを試してみました

と表示されます。

renderRow={(rowData) => <Text>{rowData.Spot.name}</Text>} 

または

renderRow={(rowData) => <Text>{rowData.Spot[name]}</Text>} 

私のコードは、このJSONで動作します。私は私が正しくデータをフェッチする方法がわからないため、エラーがあると仮定し、なぜhttps://facebook.github.io/react-native/movies.json

これがあります。

ありがとうございます!

+0

このds.cloneWithRowsを試してください(responseJson ['Spot []']) ' –

+1

ああ、ありがとうございますハッサン! :) できます !私はresponseJsonを試しました。['Spot []'])。ポイント:FML!再度、感謝します ! – YoungDreamer

答えて

0

あなたは間違った方法でプロパティにアクセスしています。あなたは​​を使用してプロパティにアクセスする必要がありますdataSource

this.setState({ 
    isLoading: false, 
    dataSource: ds.cloneWithRows(responseJson['Spot[]']), 
}); 

に変更します。

ブラケット表記は、文字列に評価される(または文字列に強制変換される)式を必要とするため、任意の文字シーケンスをプロパティ名として使用できます。文字列に含めることのできる制限はありません。

関連する問題