What are the main differences between native mobile development and cross-platform frameworks like React Native or Flutter?

I’m interested in the key differences between native mobile development (using Swift/Objective-C for iOS and Kotlin/Java for Android) and cross-platform frameworks like React Native or Flutter. I know native apps tend to have better performance, but cross-platform frameworks save time by sharing a single codebase. For those who have experience with both, how do you decide which approach to take for a new project?