从useEffect

时间:2019-11-22 01:20:17

标签: javascript reactjs

我正在尝试使用钩子将数组中的数字相加。目前,这是一个投票系统。使用map语句将所有数字相加的结果使我为0。我非常确定,这与useState不能及时更新以添加数字有关,因此它总是给我零。我知道我可以将它们放在单独的数组中,然后添加它们,但是对于看起来如此简单的东西来说,这似乎有些冗长。

这是我产生0的代码

const PollResultsContainer = (props) => {
    const option = props.option
    const [totalVotes, setTotalVotes] = useState(0)

    useEffect(() => {
        let newVote
        if (option.length > 0) {
            option.map(opt => {
                newVote = opt.optionVotes + totalVotes
            })
        }
        setTotalVotes(newVote)
    }, [totalVotes])
    console.log(totalVotes)
    return (
        <>
            <div className='poll-results-div'>
                <TitleCardNS title={`${totalVotes}`} size='2.5rem' align='center' color='white' />
            </div>

3 个答案:

答案 0 :(得分:2)

不需要将其存储在状态中。

const PollResultsContainer = ({option}) => {
  let totalVotes = option.reduce((acc, {optionVotes}) => acc + optionVotes, 0);
  console.log(totalVotes);
};

答案 1 :(得分:0)

我在方程中添加了另一个变量。这可能解决了useState不能及时更新的问题。

const PollResultsContainer = (props) => {
    const option = props.option
    const [totalVotes, setTotalVotes] = useState(0)
    let newVote = 0

    useEffect(() => {
        if (option.length > 0) {
            option.map(opt => {
                newVote = opt.optionVotes + newVote
                console.log(newVote)
            })
        }
        console.log(newVote)
        setTotalVotes(newVote)
    }, [totalVotes])
    console.log(totalVotes)

答案 2 :(得分:0)

我认为您不需要此组件中的任何状态或效果:

get= groovy.json.JsonOutput.toJson(get_conditions["configuration"])
ref= groovy.json.JsonOutput.toJson(ref_conditions["configuration"])
// which gives 
[{"uid":"fim:automation:Variable:280","value":"0","operator":"!="}]
[{"uid":"fim:automation:Variable:280","operator":"!=","value":0}] ==> here is the failing point