开发者问题收集

无法使用 REACTJS 读取未定义的属性“map”

2018-03-28
1330

我是 reactjs 新手。

这是我正在尝试的

class EventDemo extends Component {
    constructor(){
        super()
        this.getStarWars()
        this.state = {}
    }

    getStarWars = ()=> axios.get('https://swapi.co/api/people')
        .then(res => {
            console.log(res.data)
            this.setState({
                names: res.data.results
            })

        })
    
    
    
    render() {
        console.log(this.state.names);
        
        return (
            <div>
                {this.state.names.map(function(e){
                    return <li>{e.name}</li>
                })}
            </div>
        );
    }
}

但是我得到了以下错误

error

我在这里做错了什么?它应该可以工作。

1个回答

首先,你不应该在构造函数中调用 this.getStarWars() 函数,这是一个非常糟糕的做法,可能会给你带来麻烦,React 组件中的 http 调用通常应该从 componentDidMount 函数中调用。

但是在这种情况下问题是另一个问题,你没有为 this.state.names 赋予初始值,因此当组件尝试执行初始渲染时它会失败,因为名称未定义,因为初始渲染在 http 调用解析之前附加

你的代码应该像这样修复:

class EventDemo extends Component {
    constructor(){
        super()
        this.state = { names:[] }
    }

   componentDidMount(){
      this.getStarWars()
   }


    getStarWars = ()=> axios.get('https://swapi.co/api/people')
        .then(res => {
            console.log(res.data)
            this.setState({
                names: res.data.results
            })

        })



    render() {
        console.log(this.state.names);

        return (
            <div>
                {this.state.names.map(function(e){
                    return <li>{e.name}</li>
                })}
            </div>
        );
    }
}
Alessandro Messori
2018-03-28