【问题标题】:Getting Undefined,NaN displayed after correct output is obtained获取未定义,获得正确输出后显示NaN
【发布时间】:2018-02-13 13:49:09
【问题描述】:

错误

Additional Undefined & Nan displayed

我有存储来自 api 的响应值的数组的 console.log 状态,它给了我预期的结果,当我解析这个响应并使用字符串,对解析的数据进行浮点操作时,它正在添加额外的 undefined,NaN %。

控制台

Console of the response state

代码

import React from 'react';
import { StyleSheet, Text, View,TextInput } from 'react-native';
import axios from 'axios';

export default class OutputScreen extends React.Component {
  constructor(props) {
    super(props);
    this.renderCategory = this.renderCategory.bind(this);
    this.state={watdata:[]};
}

  componentWillMount()
  {
    const {state} = this.props.navigation;

  axios.post('https://app.accumulate65.hasura-app.io/api2',
  {
     username:'*****',
    type:state.params.inp,
    input:state.params.statement
   })
 .then(response =>this.setState({watdata:Object.values(response.data)})) 
 .catch(error => {
  console.log(error.response)
});

  }
  renderCategory()
  {
  return this.state.watdata.map((data)=>(<View style={{marginLeft:5}}>
   <Text>{String(data[0].label).substring(String(data[0].label).lastIndexOf("/") + 1, String(data[0].label).length)}                                {parseFloat(String(data[0].score)).toFixed(4)*100} %</Text>
   <Text>{String(data[1].label).substring(String(data[1].label).lastIndexOf("/") + 1, String(data[1].label).length)}                                {parseFloat(String(data[1].score)).toFixed(4)*100} %</Text>
   <Text>{String(data[2].label).substring(String(data[2].label).lastIndexOf("/") + 1, String(data[2].label).length)}                                {parseFloat(String(data[2].score)).toFixed(4)*100} %</Text>
   </View>));


  }


  render() {
    console.log(this.state);
    if(!this.state.watdata){
      return null;
  }
    return (
      <View>
         <Text style={{fontWeight:"bold",marginLeft:5}}>Your Results: </Text>
        <Text style={{fontWeight:"bold",marginLeft:5}}>Category Name                Confidence</Text>
        <View>{this.renderCategory()}</View>
      </View>
    );
  }
}

【问题讨论】:

    标签: javascript reactjs react-native jsx


    【解决方案1】:

    watdata 是一个包含两个条目的数组——第一个是包含 3 个成员的标签/分数对象的列表。顶级watdata 数组中的第二个条目是您编辑的字符串。当您在 renderCategory 方法中映射 watdata 时,您有两个元素,并且您查看每个元素的索引 0、1 和 2,这导致您总共有六个条目。最后三个都是未定义的,因为watdata 中的第二个元素是一个字符串。

    【讨论】:

    • 谢谢,我明白到底是什么问题了,你能告诉我映射我的watdata的正确方法吗?
    • this.state.watdata[0].map... 可以。您遇到问题的原因是您使用了this.setState({watdata:Object.values(response.data)})。我建议转储 Object.values 调用,然后 watdata 将拥有与从您的网络请求返回的相同的密钥。
    • 我试过this.state.watdata[0].map,它给了我undefined is not an object (evaluating this.state.watdata[0].map),如果我转储Object.values,响应将是对象类型,我希望watdata是一个数组,因为映射函数需要一个数组..
    • 你的初始状态是watdata:[]。这个if(!this.state.watdata){ return null; } 不起作用,因为![] == false。您在 Web 请求完成之前渲染您的组件,因此 undefined is not an object
    • 谢谢,我得到了解决方案,我将watdata的状态设置为watdata:Object.values(response.data)[0],我使用了this.state.watdata.map((data)=&gt;(&lt;View style={{marginLeft:5}}&gt; &lt;Text&gt;{String(data.label).substring(String(data.label).lastIndexOf("/") + 1, String(data.label).length)} {parseFloat(String(data.score)).toFixed(4)*100} %&lt;/Text&gt; &lt;/View&gt;));
    猜你喜欢
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多