Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs TypeError:无法读取属性';图像列表';未定义的_Reactjs - Fatal编程技术网

Reactjs TypeError:无法读取属性';图像列表';未定义的

Reactjs TypeError:无法读取属性';图像列表';未定义的,reactjs,Reactjs,我试图从状态中定义的图像数组中获取一个随机图像列表 import React, { Component } from 'react'; import card1 from '../graphics/card1.jpg'; import card2 from '../graphics/card2.jpg'; import card3 from '../graphics/card3.png'; import card4 from '../graphics/card4.jpg'; import car

我试图从状态中定义的图像数组中获取一个随机图像列表

import React, { Component } from 'react';
import card1 from '../graphics/card1.jpg';
import card2 from '../graphics/card2.jpg';
import card3 from '../graphics/card3.png';
import card4 from '../graphics/card4.jpg';
import card5 from '../graphics/card5.png';
import card6 from '../graphics/card6.png';

class BoardGame extends Component {
    state = { 
        imageList: [card1,card2,card3,card4,card5,card6],
        board: this.chooseImages(2,2)
    }
这是假定返回新数组的函数:

//choose random images at half size of board
        let data=[];
        let selectedImage;
        let imageList = this.state.imageList;
        const numOfPics=(rows*columns)/2;
        for(let i=0;i<numOfPics;i++){
           selectedImage = imageList[Math.floor(Math.random()*imageList.length)]
            data.push(selectedImage,selectedImage);
        }
        data=this.shuffleImageList(data);
        return data;
    }
我做错了什么


谢谢

,看来您还没有在构造函数中初始化本地状态。如果在组件中使用状态,则需要在构造函数中初始化状态

constructor(props) {
  super(props);
  this.state = { 
    imageList: [card1, card2, card3, card4, card5, card6],
    board: this.chooseImages(2,2)
  }
}

如果未在构造函数中初始化状态,则无法从组件中的状态访问它。正如Sameer所说,如果没有这个,您需要使用let来声明它。您是否将它绑定到您的类方法?并且您不需要将imageList添加到状态,因为它不是动态的。如果您的意思是这样的,choosImages在类中。将imagesList移出该状态确实解决了这个问题。仍然想知道@eramit2010提到的问题是什么,您需要将函数绑定到类,然后才能访问状态。换句话说,您可以将imageList初始化为数组,而不是在状态下创建数组并使用导入的图像进行初始化。i、 e
让imageList=[card1,card2,…]OP语法的可能副本实际上是有效的。它被称为类字段声明,是一个ecmascript方案。Babel将其转换为您刚才所写的内容。很有趣,那么根据我的理解,我需要使用Babel 7.0.0或更高版本才能使其生效?此外,这似乎真的很方便,将使代码更清晰是的,许多人似乎更喜欢它。不过我不太喜欢它。
constructor(props) {
  super(props);
  this.state = { 
    imageList: [card1, card2, card3, card4, card5, card6],
    board: this.chooseImages(2,2)
  }
}