开发者问题收集

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>
  )

Print of error

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