TypeError undefined 不是一个函数
2018-08-05
1210
我是 React Native 的新手,我正在尝试使用 map 函数创建一个模式。
我不知道这是否是最好的方法,但我查看了许多资源,却无法弄清楚如何解决这个问题,因为我总是在标题上收到这个错误:
代码:
let times = this.state.plantelData.map(function (nome, key) {
var detScout = '';
detScout = nome.scout.map(function (item, i) {
return (
<Text>{i + ": " + item} </Text>
)
});
return (
<View style={styles.container} >
<Modal visible={this.state.showMe} onRequestClose={() => console.warn("this is sparta")} >
<View style={styles.modalView} >
{detScout}
<TouchableOpacity onPress={() => {
this.setState({ showMe: false })
}} >
<Text style={styles.closeText}> Fechar</Text>
</TouchableOpacity>
</View>
</Modal>
<ListItem avatar key={key}>
<Left>
<Thumbnail source={{ uri: nome.foto }} />
</Left>
<Body>
<Text>{nome.apelido + " - " + nome.nome_clube + " #" + nome.posicao_clube}</Text>
<Text note>{"Posição: " + nome.posicao_atleta + " - Pontos: " + nome.pontos}</Text>
</Body>
<Right>
<Text note>{nome.pontos}</Text>
</Right>
<Right>
<TouchableOpacity onPress={() => {
this.setState({ showMe: true })
}} >
<Icon type="FontAwesome" name="soccer-ball-o" />
</TouchableOpacity>
</Right>
</ListItem>
</View>
)
2个回答
map()
是
Array.prototype
上的一种方法,但
nome.scout
似乎不是一个数组,而是一个普通对象。
您需要的是来自此对象的键值对,以便您可以映射它们。这可以使用
Object.entries()
来完成。
试试这个:
detScout = Object.entries(nome.scout).map(function([ key, item ]) {
return (
<Text>{key + ": " + item} </Text>
)
});
Lennholm
2018-08-05
在问题评论中,您说响应 json 是:
scout: { CA: [ 1 ], DD: [ 2 ], FS: [ 1 ], PE: [ 1 ], RB: [ 1 ], SG: [ 1 ] }
在这种情况下,“scout”不是数组,而是对象,这就是为什么您不能使用 map 函数。
如果您无法更改 API 响应,则可以使用类似以下内容:
for(var propt in nome.scout){
console.log(nome.scout[propt]);}
Luís C Meireles
2018-08-05