【发布时间】:2019-11-05 23:57:15
【问题描述】:
我有一个图表组件,可以在其中显示/隐藏特定的线条。为了跟踪哪些行处于活动状态,我将activeKeys 数组保持在一个状态。最初,我从获取数据数组的函数getKeys 中获取键名。
当我这样做时:
const defaultValue = getKeys(data)
console.log('defaultValue from keys', defaultValue)
const [activeKeys, setActiveKeys] = useState(defaultValue)
console.log('activeKeys', activeKeys)
第一个控制台日志显示正确的键:
["createdCount", "confirmedCount", "hasFeedbackCount"]
第二个控制台日志显示[]
但是如果我这样做:
const defaultValue = ["createdCount", "confirmedCount","hasFeedbackCount"]
console.log('defaultValue', defaultValue)
const [activeKeys, setActiveKeys] = useState(defaultValue)
console.log('activeKeys', activeKeys)
第一个控制台日志显示相同的数组:
["createdCount", "confirmedCount", "hasFeedbackCount"]
并且 activeKeys 显示正确的数组:
["createdCount", "confirmedCount", "hasFeedbackCount"]
useState 坏了还是什么? getKeys 是一个简单的函数,没有承诺或类似的东西。它看起来像这样:
const getKeys = (data: Props['data']): string[] => {
const reduced = data.reduce((acc, datum) => [...acc, ...Object.keys(datum.lines)] as any, [])
const setted = new Set(reduced)
const arrayed = Array.from(setted)
return arrayed
}
Props['data']的形状是:
data: {
date: string
lines: Partial<Record<string, number>>
}[]
【问题讨论】:
-
什么是
def?不应该是defaultValue吗? -
@tkausl 你真快!我现在编辑了它,它只是一个错字。在我的代码中,我写了所有
def,但我在这里发布了我想通过将其重命名为defaultValue -
我无法在 codesandbox.io/s/react-typescript-763kf 复制此内容。你能分享一个重现问题的沙盒吗?
-
尝试打印数据以及默认值数组
-
@MehdiSaffar 你解决了这个问题吗?
标签: arrays reactjs typescript react-hooks