使用 React Hooks 计算状态值的总和
Calculate sum of values in state with React Hooks
我正在使用 React Hooks 在状态中存储数据。
我想创建一个函数来计算值的总和。我尝试了一些方法,但它不起作用。
这是我的具有“totalIncome”功能的组件:
import { UidContext } from "../components/AppContext"
import React, { useContext, useEffect, useState } from "react"
import axios from "axios"
export default function Balance() {
const uid = useContext(UidContext)
const [userWalletIncomes, setUserWalletIncomes] = useState('')
const [userWalletFees, setUserWalletFees] = useState('')
const [formIncomes, setformIncomes] = useState(false)
useEffect(() => {
if (uid !== null) {
axios.get(`${process.env.REACT_APP_API_URL}api/balance/${uid}`)
.then((res) => {
setUserWalletIncomes(res.data[0].incomes)
setUserWalletFees(res.data[0].fees)
})
}
}, [uid])
const totalIncome = () => {
Object.entries(userWalletIncomes).map(([key, value]) => {
let total = 0
console.log(value)
for (let i = 0; i < value.length; i++) {
total += value[i]
}
return total
})
}
return (
<section className="border my-2 w-max md:w-11/12 mx-auto text-center">
<h1 className="text-3xl my-5">Solde</h1>
<div className="text-left mx-auto flex">
<p className="w-32 border p-1">Montant des revenus</p>
<p className="w-32 border p-1">{totalIncome()}</p>
</div>
</section>
)
}
console.log(值) returns :
1500 Balance.js:42
640 Balance.js:42
90 Balance.js:42
1500 Balance.js:42
640 Balance.js:42
90 Balance.js:42
有什么想法吗?
谢谢
根据您的日志显示,我希望该函数能够像这样工作:
const totalIncome = () => {
let total = 0
Object.entries(userWalletIncomes).forEach(([key, value]) => {
total += value
})
return total
}
看来你很接近。您正在记录 value
并且它显然不是数组,因此没有 length
属性 并且您无法对其进行迭代。
我建议对对象的值使用 array.reduce
并将它们与计算的总数相加。
const totalIncome = () => {
return Object.values(userWalletIncomes).reduce((total, value) => total + value, 0)
}
除此之外,您需要为 userWalletIncomes
提供有效的初始状态,即它需要是一个对象而不是空字符串。这样 totalIncome
函数可以在初始状态下正常工作,直到数据被提取 and/or 更新。
const [userWalletIncomes, setUserWalletIncomes] = useState({});
我正在使用 React Hooks 在状态中存储数据。 我想创建一个函数来计算值的总和。我尝试了一些方法,但它不起作用。
这是我的具有“totalIncome”功能的组件:
import { UidContext } from "../components/AppContext"
import React, { useContext, useEffect, useState } from "react"
import axios from "axios"
export default function Balance() {
const uid = useContext(UidContext)
const [userWalletIncomes, setUserWalletIncomes] = useState('')
const [userWalletFees, setUserWalletFees] = useState('')
const [formIncomes, setformIncomes] = useState(false)
useEffect(() => {
if (uid !== null) {
axios.get(`${process.env.REACT_APP_API_URL}api/balance/${uid}`)
.then((res) => {
setUserWalletIncomes(res.data[0].incomes)
setUserWalletFees(res.data[0].fees)
})
}
}, [uid])
const totalIncome = () => {
Object.entries(userWalletIncomes).map(([key, value]) => {
let total = 0
console.log(value)
for (let i = 0; i < value.length; i++) {
total += value[i]
}
return total
})
}
return (
<section className="border my-2 w-max md:w-11/12 mx-auto text-center">
<h1 className="text-3xl my-5">Solde</h1>
<div className="text-left mx-auto flex">
<p className="w-32 border p-1">Montant des revenus</p>
<p className="w-32 border p-1">{totalIncome()}</p>
</div>
</section>
)
}
console.log(值) returns :
1500 Balance.js:42
640 Balance.js:42
90 Balance.js:42
1500 Balance.js:42
640 Balance.js:42
90 Balance.js:42
有什么想法吗? 谢谢
根据您的日志显示,我希望该函数能够像这样工作:
const totalIncome = () => {
let total = 0
Object.entries(userWalletIncomes).forEach(([key, value]) => {
total += value
})
return total
}
看来你很接近。您正在记录 value
并且它显然不是数组,因此没有 length
属性 并且您无法对其进行迭代。
我建议对对象的值使用 array.reduce
并将它们与计算的总数相加。
const totalIncome = () => {
return Object.values(userWalletIncomes).reduce((total, value) => total + value, 0)
}
除此之外,您需要为 userWalletIncomes
提供有效的初始状态,即它需要是一个对象而不是空字符串。这样 totalIncome
函数可以在初始状态下正常工作,直到数据被提取 and/or 更新。
const [userWalletIncomes, setUserWalletIncomes] = useState({});