如何更新嵌套的useState?

时间:2021-01-01 20:07:34

标签: javascript reactjs logic use-state

嘿,我在更新 useState 时遇到了问题。我看到了一些例子,但在尝试实现它时它不起作用..任何人都可以帮我解决这个小问题吗?

这是原始状态,我需要更新标签

        setChartData({
            labels: [ ],
            datasets:[
            {
                label:'Sales',
                data:[ //values for population num
                    
                ],
                backgroundColor:[
                    'rgba(255, 99, 132, 0.6)',
                    'rgba(54, 162, 235, 0.6)',
                    'rgba(255, 206, 86, 0.6)',
                    'rgba(75, 192, 192, 0.6)',
                    'rgba(153, 102, 255, 0.6)',
                    'rgba(255, 159, 64, 0.6)',
                    'rgba(255, 99, 132, 0.6)'
                ]
            }
            ]
        })

这是我试图分配给标签数组的数组

        for (let y = 0; y < weeks.length; y++) {
            setChartData(prevState => ({
                ...prevState,
                labels: {
                    ...prevState.labels,
                    weeks[y]
                }
            }))
        }

2 个答案:

答案 0 :(得分:1)

糟糕!您在循环中使用了错误的大括号!试试这个:

def flatten(arr):
    result = []
    for item in arr:
        if type(item) != type([]):
            result = result + [item]
        else:
            result = result + flatten(item)
    return result

print(flatten([1,[[2],3],[[[4]]]]))
##[1,2,3,4]

您将 for (let y = 0; y < weeks.length; y++) { setChartData((prevState) => ({ ...prevState, labels: /* { */ [ ...prevState.labels, weeks[y] ] /* } */ })); } 数组替换为使用无效语法的对象,这可能就是您想要做的。

答案 1 :(得分:0)

尝试不将 prevState 作为回调中的参数,如下所示:

for (let y = 0; y < weeks.length; y++) {
            setChartData(() => ({
                ...chartData //or whatever you called your state variable.
                labels: {
                    ...chartData.labels,
                    weeks[y]
                }
            }))
        }