特定の線を表示/非表示にすることができるグラフコンポーネントがあります。どの行がアクティブであるかを追跡するために、activeKeys
配列を状態に保持します。最初に、データの配列を取る関数getKeys
からキー名を取得します。
私がこれをするとき:
const defaultValue = getKeys(data)
console.log('defaultValue from keys', defaultValue)
const [activeKeys, setActiveKeys] = useState(defaultValue)
console.log('activeKeys', activeKeys)
最初のコンソールログに正しいキーが表示されます。
["createdCount", "confirmedCount", "hasFeedbackCount"]
2番目のコンソールログに[]
と表示されます
しかし私がする場合:
const defaultValue = ["createdCount", "confirmedCount","hasFeedbackCount"]
console.log('defaultValue', defaultValue)
const [activeKeys, setActiveKeys] = useState(defaultValue)
console.log('activeKeys', activeKeys)
最初のコンソールログは同じ配列を示しています:
["createdCount", "confirmedCount", "hasFeedbackCount"]
AndactiveKeys
は正しい配列を示します。
["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>>
}[]
DefaultValueの代わりにdefをuseState()に渡しています。
const defaultValue = getKeys(data)
console.log('defaultValue from keys', defaultValue)
const [activeKeys, setActiveKeys] = useState(defaultValue)
console.log('activeKeys', activeKeys)