setstate不将最终项目添加到数组中

问题描述 投票:0回答:1

我想在状态下构建一个名为scores的数组,该数组将包含5个数组,其中四个对象包含scores 4-1和ID。当用户单击“下一步”时,前3个对象被添加,最后一个对象应自动添加,因为它将是唯一剩余的选项。但是,当我到达倒数第二个选项并单击“下一步”时,要么不添加最后一个选项,要么倒数第二个选项被最后一个选项代替。以下是我拥有的脚本:

dealWithNextButton = () => {
    const { statements, scores } = this.state;
    const { score } = this.props.match.params;
    const idxOfPart = this.matchPartToIdx();

    for (let i in statements[idxOfPart]) {
        let id = statements[idxOfPart][i].id;

        if (statements[idxOfPart][i].isSelected) {
            if (!statements[idxOfPart][i].prevSelected) {
                this.setState({
                    prevSelected: statements[idxOfPart][i].prevSelected = true,
                    scores: scores.map((item, index) => index === idxOfPart ? [...item, {'id': id, 'score': score}] : item)
                })
            }
        } else if (score === "2") {
            this.setState({
                scores: scores.map((item, index) => index === idxOfPart ? [...item, {'id': id, 'score': "1"}] : item)
            })
        }
    }
}

当前输出:

//either this
[{id: "O1", score: 4}, {id: "G1", score: 3}, {id: "B1", score: 2}]
//or this
[{id: "O1", score: 4}, {id: "G1", score: 3}, {id: "R1", score: 1}]

和预期的输出:

[{id: "O1", score: 4}, {id: "G1", score: 3}, {id: "B1", score: 2}, {id: "R1", score: 1}]

请让我知道是否需要进一步澄清。

谢谢!

reactjs setstate
1个回答
0
投票

据我所知

...项目是{id:“ O1”,得分:4},{id:“ G1”,得分:3},

但不是添加的内容。因此,当..items中添加了其他内容时,它只会是{id:“ O1”,得分:4},{id:“ G1”,得分:3},+添加的内容。

© www.soinside.com 2019 - 2024. All rights reserved.