如何从react组件访问数组中的数组?

时间:2019-05-19 00:17:17

标签: javascript arrays node.js json reactjs

我有这个数组:

{
  "firstname": "Jessica",
  "lastname": "Wood",
  "favorite": {
        "movie": Flint Town,
        "drink": Sprite
  }
}

我正在尝试喝酒,但我发现对象无效,因为找到了一个React子对象:有钥匙的对象。

我该如何解决?

我的反应组件:

import React, { Component } from 'react';
import axios from 'axios';

class Home extends Component {

  state = {
    info: []
  }

  componentDidMount() {
    axios.get('http://localhost:9000/api')
      .then(res => {
        const info = res.data;
        this.setState({ info });
      })
  }

  render() {
    return (
      <ul>
        <li>{this.state.info.favorite.drink}</li>
      </ul>
    )
  }
}
export default Home;

1 个答案:

答案 0 :(得分:2)

您需要解析“收藏夹”对象中的值,以便可以将它们呈现为字符串。

似乎您正在尝试访问this.state.info中的道具,但该道具不存在。这就是为什么它会给您带来不确定的错误的原因。在您为component分配任何信息之前,将运行render方法,就像在componentDidMount()中所做的那样。

要解决此问题,我们可以使用加载状态值来确定要显示的内容。在您的componentDidMount()逻辑完成后,加载状态将切换,以确保填充您的状态。

这是沙箱:https://codesandbox.io/s/bold-germain-k3f23

class Home extends Component {
  state = {
    info: {},
    loading: true
  };

  componentDidMount() {
    axios.get("http://localhost:9000//").then(res => {
      const info = res.data;
      const parsedInfo = {
        ...info,
        favorite: Object.entries(info.favorite).reduce((obj, [k, v]) => {
          obj[k] = "" + v;
          return obj;
        }, {})
      };

      this.setState({ info: parsedInfo, loading: false });
    });
  }

  render() {
    const { loading, info } = this.state;
    if (loading) {
      return <div>Loading</div>;
    } else {
      return (
        <div>
          <div>{info.favorite.movie}</div>
          <div>{info.favorite.drink}</div>
        </div>
      );
    }
  }
}