【问题标题】:Cannot read property 'map' of undefined with REACTJS无法使用 REACTJS 读取未定义的属性“地图”
【发布时间】:2018-09-07 16:09:14
【问题描述】:

我是 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>
        );
    }
}

但是我得到了以下错误

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

【问题讨论】:

  • 只需将names: [] 添加到构造函数内的this.state 对象即可。

标签: reactjs


【解决方案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>
        );
    }
}

【讨论】:

  • 非常感谢您的帮助
  • 没问题!当我第一次开始使用 react 时,我遇到了和你一样的麻烦 :)
猜你喜欢
  • 2017-07-30
  • 2020-09-14
  • 1970-01-01
  • 2021-11-17
  • 2018-02-08
  • 2020-04-20
  • 2020-11-18
  • 2021-07-11
  • 1970-01-01
相关资源
最近更新 更多