javascript - this.state.[object].map 不是函数

标签 javascript reactjs

我敢打赌我错过了一些微不足道的东西,但由于某种原因,我得到了

this.state.iata.map is not a function

,即使我已将此上下文绑定(bind)到需要使用该状态的所有函数。另外,iata state 是一个数组,所以我没有看到使用 map 函数的问题。

这是代码:

import React from 'react';
import { Select, MenuItem } from '@material-ui/core/Select';

export default class IATACodesSelect extends React.Component {

    constructor(props) {
        super(props);

        this.state = {
            iata: []
        }   

        this.changeIATAState = this.changeIATAState.bind(this);
        this.renderIATACodes = this.renderIATACodes.bind(this);
    }

    componentWillMount() {
        this.changeIATAState();
    }

    changeIATAState = () => {
        this.setState({iata: this.getIATACodes});
    }

    getIATACodes = () => {
        return JSON.parse("../../assets/iata-codes.json");
    }

    renderIATACodes = () => {
        return this.state.iata.map(data => 
            <MenuItem key={data.response.code}>{data.response.name}</MenuItem>
        )
    }

    render() {
        return(
            <Select>
                {this.renderIATACodes()}
            </Select>
        );
    }
}

VS Code 正在识别该状态的状态和映射函数,这意味着代码应该没问题,但正如我所说,我可能错过了一些微不足道的东西,而且我看不到什么。

非常感谢您的帮助。

最佳答案

对我来说有几个明显的问题。

  1. 为什么不像这样导入文件顶部的 JSON 文件? 然后您可以直接在渲染方法中使用它,如下所示:
import iataData from '../../assets/iata-codes.json'
...
return (
  <Select>
    {iataData.map(data => 
      <MenuItem key={data.response.code}>{data.response.name}</MenuItem> 
    }
  </Select>
)

您可以放弃整个状态并更新状态。这不是必需的。但是...如果您确实需要状态,请检查以下内容。

  • 由于这行代码,您会收到错误
  • changeIATAState = () => {
      this.setState({iata: this.getIATACodes});
    }
    

    您实际上并没有“调用”该函数 -> {iata: this.getIATACodes()}。所以你不能对函数引用执行 array.map() 。 function.map() 不起作用。

  • 您实际上并没有解析正确的东西。
  • JSON.parse("../../assets/iata-codes.json");
    

    您正在尝试解析字符串“../../assets/iata-codes.json”,这显然会导致类型错误

    Uncaught SyntaxError: Unexpected token . in JSON at position 0
    

    希望这能为您解决问题。

    关于javascript - this.state.[object].map 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54504622/

    相关文章:

    javascript - 独立项目符号的相对运动 (HTML5/Javascript)

    javascript - React Native - 如何解析 json 数据并将其设置在状态对象中

    reactjs - if else 根据条件自动对焦

    javascript - History.push() 和 props.location.state 导致 "Cannot read property ' state' 未定义”

    javascript - 如何在没有 html 标记的情况下显示 React Quill 的内容?

    javascript - 带有表单数据的 Blueimp 多 block 上传

    javascript - 在 Angular JS 中动态地将类添加到 div

    javascript - Angular 过滤器出错,将长 json 字符串编辑为 html 中的新行

    javascript - Google map 上的 FlowMap 可视化

    javascript - 在 React 中导航到 map 内的上一项