【问题标题】:how to split the result in array React/Axios如何在数组 React/Axios 中拆分结果
【发布时间】:2020-05-23 15:54:31
【问题描述】:

我今天将向您解释我的问题:以下代码可以正常工作,我得到了我的数据库,然后我使用了一个 map 函数,所以一切都很好。我的问题和下一个问题是,我在其中得到一个表,我有一个包含数组的对象。该表具有以下形式:

 [{"title":"Lagunitas IPA (Demi-Pinte","quantity":2}]

并且可以恢复两个数据之一,因为当我映射数组时,我得到了所有数据。

你知道如何解决这个问题吗?

    import React, { Component } from 'react';
    import { CardText,  Col } from 'reactstrap';
    import axios from 'axios'

    const entrypoint = process.env.REACT_APP_API_ENTRYPOINT+'/api';

    class AdminPage  extends Component {

    constructor(props) {
        super(props);
        this.state = {
            data: [],   
              },
        };
    }

    getRandom = async () => {

        const res = await axios.get(
            entrypoint + "/alluserpls"
        )
        this.setState({ data: res.data })
    }
    componentDidMount() {
        this.getRandom()
    }
    render() {

        let datas = this.state.data.map(datass => {
          return (
              <div >
                  <Col sm="12" key={datass.id}">
                          <CardText> Commande{datass.items}</CardText>
                  </Col>
              </div>
          )
      })
        return (
        <div> 
        {datas}
      </div>
        )
     }
   }

export default AdminPage 

【问题讨论】:

  • 尝试调试并查看 datass.items 和 datass.id 中的确切内容。您可能需要访问 datass.items[0] 和 datass.items[1] 但这只是一个有根据的猜测
  • {datass.title} 将显示每个标题
  • inside Commande{datass.title} 我的意思是这样
  • @bwright { "id": 118, "title": "brand", "items": "[{\"title\":\"Lagunitas IPA (Demi-Pinte\",\ "数量\":2}]" }
  • @PramodNikam 我不能 Commande{datass.title} 因为我的桌子上有“title”

标签: javascript reactjs axios fetch


【解决方案1】:
    getRandom = async () => {
            const res = await axios.get(
                entrypoint + "/alluserpls"
            )
            const data = res.json();
            this.setState({ data })
        }

【讨论】:

  • and for inside Commande{} 如果我只想为“项目”取“数量”,代码是什么?
  • 让 datas = this.state.data.map(datass => { return ( Commande{datass.quantity} ) })
  • 我有错误,未捕获(承诺) TypeError: t.json is not a function at AdminPage.js:82 at l (runtime.js:45) at Generator._invoke (runtime.js: 264) 在 Generator.next (runtime.js:98) 在 r (asyncToGenerator.js:3) 在 u (asyncToGenerator.js:25)
  • 数量字符串还是数字?
  • 这个模式 "items": "[{\"title\":\"Lagunitas IPA (Demi-Pinte\",\"quantity\":2}]" } 我猜字符串也是
【解决方案2】:

当你想从服务器获取数据时,它是 json 格式的,所以它可以从服务器传输到客户端。因此,当您在客户端接收时,请确保对其进行解析,这会将数据返回为对象形式,您可以使用数据的每个属性来映射它们。

假设您正在接收此数据

 [{"title":"Lagunitas IPA (Demi-Pinte","quantity":2}]

这个数据是json格式的,现在你需要解析它才能单独使用属性

在您的 getRandom 方法中

getRandom = async () => {

   const res = await axios.get(
      entrypoint + "/alluserpls"
   )
   let parsedData = JSON.parse(res.data);
   this.setState({ data: parsedData  })
}

现在您将数据存储为对象数组,在渲染中您可以映射它并将其用作

let datas = this.state.data.map((datass,index) => {
    return (
       <div>
           <Col sm="12" key={index}">
               <Col sm="6">
               Title : {datass.title}
               </Col>
               <Col sm="6">
               Quantity: {datass.quantity}
               </Col>
           </Col>
       </div>
    )
 })

这将分别显示数量和标题的值。

【讨论】:

  • 我收到错误 AdminPage.js:83 Uncaught (in promise) SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse ()
  • 你需要先考虑你在res中得到的数据是不是json..你上面发布的数据是准确的。
  • 嗨,我认为的问题是我在同一张表中同时使用了两种格式。你觉得怎么样?我的表看起来像这样精确{“id”:118,“name”:“”,“phone”:“1643416502”,“randomID”:“456”,“title”:“”, "数量": "", "项目": "[{\"title\":\"Lagunitas IPA (Demi-Pinte\",\"quantity\":2}]" }
  • 我真的很想分两部分恢复物品
  • { "id": 118, "name": "", "phone": "1643416502", "randomID": "456", "title": "", "quantity": " ", "items": "[{\"title\":\"Lagunitas IPA (Demi-Pinte\",\"quantity\":2}]" } 也在 json 中,你应该可以解析它,您可以在控制台中检查它是否与您在 res.data 中收到的确切数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
相关资源
最近更新 更多