For ForEach and LazyForEach, if a custom keyGenerator is not provided, the framework will automatically generate a key using the following default logic: (item: T, index: number) => index + '__' + JSON.stringify(item). When the data source is modified, ForEach or LazyForEach detects changes in the key and triggers a rebuild of the component nodes to refresh the UI.
Reference
LazyForEach: Lazy Data Loading, ForEach: Rendering Repeated Content