Context Menu
下に正しいデータが表示されているにもかかわらず、表示されているデータが間違っているという問題に直面していList
ます。問題は、最初のアイテムのコンテキスト メニューでアクションをトリガーList
すると、正しいデータが再レンダリングされて表示される様子を確認できますが、最初のアイテムのコンテキスト メニューを再度トリガーすると、正しい状態。2 番目の項目のコンテキスト メニューを開くと、正しい状態が表示されますが、ここで "Two" を選択して同じコンテキスト メニューを開くと、State
間違った状態になります (表示されるはずのときに、選択された 1 つだけが表示されます)。 1 & 2、List
表示のように)。
1つずれているように感じます(最新の状態ではなく以前の状態を提示するなど)。それが単なるバグなのか、それとも間違った使い方をしているのかわかりません。
問題を再現するコードのスニペットを次に示します。
@main
struct ContextMenuBugApp: App {
let availableItems = ["One", "Two", "Three", "Four", "Five"]
@State var selectedItems: [String] = []
var body: some Scene {
WindowGroup {
List {
ForEach(availableItems, id: \.self) { item in
HStack {
let isAlreadySelected = selectedItems.contains(item)
Text("Row \(item), selected: \(isAlreadySelected ? "true" : "false")")
}.contextMenu {
ForEach(availableItems, id: \.self) { item in
let isAlreadySelected = selectedItems.contains(item)
Button {
isAlreadySelected ? selectedItems.removeAll(where: { $0 == item }) : selectedItems.append(item)
} label: {
Label(item, systemImage: isAlreadySelected ? "checkmark.circle.fill" : "")
}
}
}
}
}
}
}
}
問題を示すビデオ: https://twitter.com/xmollv/status/1412397838319898637
ありがとう!
編集:
iOS 15 のリグレッション (少なくともリリース候補版) のようですが、iOS 14.6 では問題なく動作します。