Reputation: 10495
I'm learning SwiftUI and I'm trying to build a simple To-Do app.
My root view is this:
struct ContentView: View {
@State var reminders: [Reminder] = []
var body: some View {
print("ContentView", reminders)
return VStack {
RemindersListView(
reminders: reminders
)
Button("Add") {
reminders.append(.empty)
}
}
}
}
And RemindersListView
is
struct RemindersListView: View {
@State var reminders: [Reminder]
var body: some View {
print("RemindersListView", reminders)
return List {
ForEach(reminders.indices) { index in
ReminderView(reminder: $reminders[index])
}
}
}
}
When I tap the Add
button I get the following output:
ContentView []
RemindersListView []
ContentView [Common.Reminder(id: 2FC19F91-9B96-40DB-8CCB-4CBB39C62DBD, done: false, text: "")]
RemindersListView []
Meaning the state in ContentView
changed and it re-renders the app, but RemindersListView
receives the initial value.
Any ideas? Thanks
Upvotes: 0
Views: 75
Reputation: 1
You are initializing the RemindersListView
with an empty Array! then you are modifying it without updating it! You should Bind your data for solving the issue with @Binding
, it is easiest way for you but not the only way to bind data, there are more ways to bind data.
struct RemindersListView: View {
@Binding var reminders: [Reminder] // <<: Here!
var body: some View {
print("RemindersListView", reminders)
return List {
ForEach(reminders.indices) { index in
ReminderView(reminder: $reminders[index])
}
}
}
}
And also this in :
struct ContentView: View {
@State var reminders: [Reminder] = []
var body: some View {
print("ContentView", reminders)
return VStack {
RemindersListView(reminders: $reminders) // <<: Here! with $
Button("Add") {
reminders.append(.empty)
}
}
}
}
Upvotes: 1