繁体   English   中英

我们如何在 React js 中从 firebase 中读取一级嵌套深度数组数据?

[英]How do we read one level nested deep array data from firebase in react js?

在我的 firebase 数据库中,我的数据如下所示

在此处输入图像描述

我从 firebase 读取数据的代码如下

export const startSetPartialExpenses = (() => {
    return (dispatch, getState) => {
        const uid = getState().auth.uid
        return database.ref(`users/${uid}/partialpayments`).once('value').then((snapshot) => {
            const partialExpenses = []
            
            snapshot.forEach((childSnapshot) => {
                
                partialExpenses.push({
                    id: childSnapshot.key,
                    ...childSnapshot.val()
                })
            })
            dispatch(setPartialExpense(partialExpenses))
        })
    }
})

从 firebase 读取数据后,当我的组件初始加载时,它具有如下数据在此处输入图像描述

在这里,我将来自 firebase 数据库的 redux 存储中的数据复制到本地组件 object。

partialExpense: props.expense && props.expense.paidStatus === 'Partial Paid' ? props.partialExpense : [],

在此处输入图像描述

下面我添加了 map 逻辑来读取所有行

<tbody className="create__partial-tbody">
{this.state.partialExpense.map((row) => (
<tr className="create__partial-tr" key={row.balance}>
<td>
  <select
    value={row.partialPaidStatus}
    onChange={(event) => this.handlepartialPaidStatusChange(row.balance, event)}
    >
    <option value="Select"> {`  `} </option>
    <option value="Partial Paid">Partial Paid</option>
    <option value="Paid">Paid</option>
  </select>
</td>
<td >
  <input 
    type="text"
    placeholder="Amount"
    value={row.partialAmount}
    onChange={(event) => this.handlepartialAmountChange(row.balance, event)}
  />
</td>

在此处输入图像描述

添加上面的代码后,我在本地机器上运行了我的代码,它没有显示我的数据,它显示的是默认值。

在此处输入图像描述

要获得您期望的结果,需要两次迭代,每个键一次,每个“行”一次。 由于 map 仅适用于 arrays,因此您需要将其转换为可迭代的,我们还可以在其中存储密钥,以防您将来需要更新它。 为了保留您的结构,因为您的需要的上下文不清楚,我将 map 放到一个对象数组中。

const result = []
for (const [key, row] of Object.entries(data.val())) {
  for (const [index, value] of Object.entries(row)) {
    result.push({payKey: key, entry: index, ball: value.balance});
  }
}

从那里,您应该能够根据您的应用程序设计来操作循环和使用的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM