react / react/react-native

StyleSheet.flatten with a falsy value returns undefined

Ouverte
#46,293 3 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

API: StyleSheet Issue: Author Provided Repro
Langage dominant
C++
Étoiles
127k
Forks
25.3k
Merge moyen
1 j 23 h
PR mergées (30 j)
4

Description

Description

On iOS and Android (not web), calling StyleSheet.flatten with null/undefined/false returns undefined.

The TypeScript signature of flatten is flatten<T>(style?: StyleProp<T>): T. null/undefined/false are valid StyleProps, so passing them to flatten should be valid, but flatten is supposed to return T (some style object), and undefined is usually not a valid T.

Widening the return type of flatten to T | undefined is an option, but would be a public API change. I think changing the function to return {} for falsy values is more correct, since you probably want to get a final computed, flattened style object, and don't care what the input was or if it was falsy.

Steps to reproduce

On iOS or Android:

console.log(typeof StyleSheet.flatten(false)) // => 'undefined'
React Native Version

0.75.2

Affected Platforms

Runtime - Android, Runtime - iOS

Output of npx react-native info
System:
  OS: macOS 14.2
  CPU: (8) arm64 Apple M2
  Memory: 339.17 MB / 8.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 22.3.0
    path: ~/.volta/tools/image/node/22.3.0/bin/node
  Yarn:
    version: 3.6.4
    path: ~/.volta/tools/image/yarn/4.3.1/bin/yarn
  npm:
    version: 10.8.1
    path: ~/.volta/tools/image/node/22.3.0/bin/npm
  Watchman:
    version: 2024.07.01.00
    path: /opt/homebrew/bin/watchman
Managers:
  CocoaPods:
    version: 1.15.2
    path: /Users/hazel/.rbenv/shims/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 23.5
      - iOS 17.5
      - macOS 14.5
      - tvOS 17.5
      - visionOS 1.2
      - watchOS 10.5
  Android SDK: Not Found
IDEs:
  Android Studio: Not Found
  Xcode:
    version: 15.4/15F31d
    path: /usr/bin/xcodebuild
Languages:
  Java: Not Found
  Ruby:
    version: 2.7.4
    path: /Users/hazel/.rbenv/shims/ruby
npmPackages:
  "@react-native-community/cli": Not Found
  react:
    installed: 18.3.1
    wanted: 18.3.1
  react-native:
    installed: 0.75.2
    wanted: 0.75.2
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: false
iOS:
  hermesEnabled: true
  newArchEnabled: fals
Stacktrace or Logs
N/A
Reproducer

https://snack.expo.dev/@catboyfan/stylesheet-flatten-undefined

Screenshots and Videos

No response

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par localiser l’implémentation de StyleSheet.flatten et sa déclaration TypeScript, puis reproduisez le comportement sur iOS ou Android avec le Snack lié. Vérifiez les entrées null, undefined et false ; le travail est terminé lorsque les valeurs falsy produisent systématiquement un objet de style vide, conforme au type de retour public.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
react-native, typescript
Domaine
mobile-dev
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.