React:渲染一个数据数组

Posted

技术标签:

【中文标题】React:渲染一个数据数组【英文标题】:React: rendering an Array of Data 【发布时间】:2021-12-16 12:33:09 【问题描述】:

处理我的第一个 react 项目,但在如何循环并将我的数据呈现到前端方面没有任何进展。

我正在使用 axiosmysql 数据库中获取股票代码列表,对于其中的每一个,我再次使用 axios 从外部网站抓取一些值。

参见下面的代码 sn-p:

const fetchStocks = () => 
    let stocksList = []

    Axios.get('http://localhost:3001/fetchStocks').then((response) => 
        response.data.map((val, key) => 

            const url = 'https://www.tradegate.de/orderbuch.php?isin=' + val.stockTicker
            Axios.get(url).then((response) => 

                let $ = cheerio.load(response.data)
                let name = $('#col1_content h2')[0].children[0].data
                let last = $('#last')[0].children[0].data
                let delta = $('#delta')[0].children[0].data
                let high = $('#high')[0].children[0].data
                let low = $('#low')[0].children[0].data

                stocksList.push(
                    sId: val.sId,
                    stockName: name,
                    stockTicker: val.stockTicker,
                    stockLast: last,
                    stockDelta: delta,
                    stockHigh: high,
                    stockLow: low
                )
            )
        )
    )

当我做 console.log(stocksList) 时,我几乎得到了我想要的:

[

        "sId": 3,
        "stockName": "Tesla Inc.",
        "stockTicker": "US88160R1014",
        "stockLast": "1 049,80",
        "stockDelta": "+8,90%",
        "stockHigh": "1 049,80",
        "stockLow": "966,90"
    ,
    
        "sId": 1,
        "stockName": "Apple Inc.",
        "stockTicker": "US0378331005",
        "stockLast": "128,00",
        "stockDelta": "-1,16%",
        "stockHigh": "130,28",
        "stockLow": "127,70"
    ,
    
        "sId": 2,
        "stockName": "Intel Corp.",
        "stockTicker": "US4581401001",
        "stockLast": "42,725",
        "stockDelta": "+0,78%",
        "stockHigh": "42,85",
        "stockLow": "42,37"
    
]

我现在想做这样的事情:


    stocksList.map(stock => 
        return ( 
            <li key = stock.sId>stock.stockName</li>
        )
    )

对于数据库中的每个条目,但到目前为止我没有运气并且不太明白我错在哪里 - 我猜测我是如何设置数组的?

【问题讨论】:

“没有运气”是什么意思?正在发生什么,与您预期发生的情况相比如何?另外,person 是在哪里定义的? 我的错,已编辑。 我一直在关注一些使用数组的教程,但运气不好,我既没有提到我希望的输出,也没有提到控制台中记录的任何错误。 我认为你需要使用 useEffect 钩子来获取数据和状态变量来显示数据。 【参考方案1】:

由于您要返回 JSX,因此您可能希望使用 () 大括号而不是 。


    stocksList.map(stock => (
        return ( 
            <li key = stock.sId>stock.stockName</li>
        )
    ))

或者简单地说:


    stocksList.map(stock => <li key = stock.sId>stock.stockName</li>)

附:我也没有看到你试图渲染数组的部分代码

【讨论】:

【参考方案2】:

当组件挂载后,useEffect会被调用,然后调用fetchStocks函数,最后从服务器获取数据并通过useState进入组件状态

import React,  useState, useEffect  from 'react';

const FC = () => 
  const [stocksList, setStocksList] = useState([])

  const fetchStocks = () => 
      let list = []

      Axios.get('http://localhost:3001/fetchStocks').then((response) => 
          response.data.map((val, key) => 

              const url = 'https://www.tradegate.de/orderbuch.php?isin=' + val.stockTicker
              Axios.get(url).then((response) => 

                  let $ = cheerio.load(response.data)
                  let name = $('#col1_content h2')[0].children[0].data
                  let last = $('#last')[0].children[0].data
                  let delta = $('#delta')[0].children[0].data
                  let high = $('#high')[0].children[0].data
                  let low = $('#low')[0].children[0].data

                  list.push(
                      sId: val.sId,
                      stockName: name,
                      stockTicker: val.stockTicker,
                      stockLast: last,
                      stockDelta: delta,
                      stockHigh: high,
                      stockLow: low
                  )
              )
          )
      )

      setStocksList(list)
  

  useEffect(() => 
    fetchStocks()
  , [])


  return stocksList.map(stock => <li key = stock.sId>stock.stockName</li>)

【讨论】:

以上是关于React:渲染一个数据数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React 的 API 中渲染嵌套在对象中的数组中的数据?

React-native 将渲染数组中的值插入到新数组中

React 中数组嵌套怎么渲染数据

React 帮助:在映射数组中使用 Promise 进行条件渲染 [关闭]

React:如何将 JSON 对象转换为数组并渲染它?

编辑数组后在 React 中重新渲染子组件数组