当前位置: 首页 > 知识库问答 >
问题:

无法从React状态访问对象数组中的值

程淮晨
2023-03-14

在this.state中存储对象数组后,我尝试访问对象中的值,如array[random.somevalue,但它显示错误array[random]is undefined。 但它适用于array[random]返回一个对象。 为什么我不能访问那个对象里面的值。。。?

class Quiz extends Component {
    constructor(props) {
        super(props);
        this.state = {
            data: undefined,
            q_no: 0,
            rand_q: {},
            opts: []
        }
        this.newQuestion = this.newQuestion.bind(this);
    }

    componentDidMount() {
        if(this.state.data === undefined) {
            fetch("http://restcountries.eu/rest/v2/all")
            .then(data => data.json())
            .then(data => this.setState({data: [data.map((val) => ({name: val.name, flag: val.flag}))]}))
            .then(() => console.log(this.state.data));
        }
    }

    newQuestion() {
        const state = this.state;
        const rand = Math.floor(Math.random() * 200);
        this.setState({rand_q: {name: state.data[rand].name, flag: state.data[rand].flag}, opts: [state[rand-1].name, state[rand+1].name, state[rand+2].name]});
    }
TypeError: state.data[rand] is undefined
newQuestion
src/Quiz.js:30

  27 | newQuestion() {
  28 |     const state = this.state;
  29 |     const rand = Math.floor(Math.random() * 200);
> 30 |     this.setState({rand_q: {name: state.data[rand].name, flag: state.data[rand].flag}, opts: [state[rand-1].name, state[rand+1].name, state[rand+2].name]});
     | ^  31 | }
  32 | 
  33 | render() {

请帮帮我。。。

共有1个答案

微生旻
2023-03-14

您的构造函数是在ComponentDidMount之前调用的,因此没有可用的State.Data(因为您将其设置为Undefined)。

您必须将NewQuestion调用移动到render函数或ComponentDidUpdate

 类似资料:
  • 问题内容: 我想使用React.js制作一个应用程序。我希望它可以轻松地从外部进行自定义(例如,通过编写用户脚本)。我尝试使用的想法是在根元素状态(如或)中创建一些特殊的属性,以便插件开发人员可以在此处添加一些内容。我的问题是:这是否是一个好方法,是否有Right Way™实现与我的目标相似的目标,最后,插件开发人员将如何使用这些道具? 问题答案: 一种选择是可观察的。基本上,它是一个对象,您可以

  • 我想访问父组件中的子组件的状态,我不想在子组件中使用任何可以在父组件中设置变量的处理程序,或者我不想在父组件中提升状态。我怎么能使用ref的反应打字稿创建Ref并获得父组件中的孩子的状态? 家长: 儿童:

  • 问题内容: 我在React中有一个表单,可以动态添加新的输入元素。这似乎 工作正常,但我似乎无法访问此 屏幕截图中所示的输入值… console.log数组 我尝试了以下 console.log(this.state.telephone.name) 和… console.log(this.state.telephone.tidx.name) 其中tidx是唯一键。 这是构造函数… and this

  • 问题内容: 我有一个列表视图,每当用户单击一个项目时,我都想使用onPress(可触摸的突出显示)进行操作。 我尝试定义函数,然后在onPress中调用它们,但是它们没有起作用。 首先,我定义了这样的功能: 然后 : 但是它没有用,错误: 我试图像这样在onPress上调用它: 没有帮助 没有帮助 即使我什至不能访问构造函数中定义的道具。它不知道什么是“这”! 我试图以其他方式定义函数,如下所示:

  • 我想访问来自该对象数组的ends\u数据。。。但我不能让它工作。输出未定义。请帮帮我。

  • 编辑(2020年6月22日):由于这个问题引起了一些新的兴趣,我意识到可能会有一些困惑。因此,我想强调:问题中的例子是作为玩具的例子。它没有反映问题。引发这个问题的问题是使用第三方库(对该库的控制有限),该库将回调作为函数的参数。提供最新状态的回调的正确方法是什么?在反应类中,这可以通过使用this来完成。在React钩子中,由于状态封装在函数中的方式,如果回调通过获取状态,它将是过时的(值设置回

  • 我在react native中有一个搜索栏组件,它在父组件中导入, SearchBar子组件具有以下元素: 是否可以访问此子组件在其中导入的父组件中的状态?提前感谢你的帮助