Je crée un jeu à boire simple. Lorsqu'une carte à jouer s'affiche, sa règle correspondante s'affiche en dessous. Toute la logique à cela se trouve dans mon fichier game.js. J'ai un autre écran, où vous pouvez lire les règles et les modifier. Comment puis-je partager l'état entre deux fichiers, donc lorsque je modifie les règles dans le fichier settings.js, l'état change également dans le fichier game.js? La logique dans le fichier de paramètres:
get rules() { switch (deck1.deck[this.state.card]) { case "Ace_of_Spades": return {this.state.rule1} ... case "King_of_Spades": return {this.state.rule13}
La logique dans mon fichier game.js pour les règles en ce moment est:
get rules() { switch (deck1.deck[this.state.card]) { case "Ace_of_Spades": return <Text> some rule1 <Text> ... case "King_of_Spades": return <Text> some rule13 <Text>
Mais je le ferais comme pour lui avoir l'état du fichier settings.js par exemple comme ceci:
constructor(props) { super(props); this.state = { rule1: 'some rule1', ... rule13: 'some rule13' (Also TextInput fields and functions to update the state for each rule)
Alors, quelle serait la méthode la plus simple et la plus simple pour simplement partager ces états entre les 2 fichiers ?
3 Réponses :
La façon dont ce problème est généralement géré dans React est de lever l'état < / a>.
Ainsi, dans votre exemple, les paramètres des jeux devraient être élevés jusqu'à un niveau où ils peuvent être accédés à la fois par les composants games.js
et settings.js
. Cela garantit que le flux de données est toujours à sens unique et que lorsque vous devez partager ce même état avec un nouveau composant, vous pouvez le faire facilement.
Alors, quelle serait la méthode la plus simple et la plus simple pour partager simplement ces états entre les 2 fichiers?
Le moyen le plus simple serait de conserver l'état dans le composant de jeu parent et de transmettre des méthodes pour modifier cet état au composant de paramètres - vous pouvez suivre cette réponse pour savoir comment faire: https://stackoverflow.com/a/35537718/3156644
Mais si vous allez partager l'état avec plusieurs composants, vous devriez regarder React Context ou un outil de gestion d'état tel que Redux.
Le stockage des paramètres semble être le cas d'utilisation idéal pour AsyncStorage. Expo, qu'il semble que vous utilisez, propose un tutoriel à ce sujet a >.
Dans votre fichier settings.js, vous voudrez appeler AsyncStorage.setItem ()
chaque fois qu'une des règles est modifiée. Dans votre fichier game.js, vous voudrez appeler AsyncStorage.getItem ()
pour accéder à la règle souhaitée.
Sachez qu'AsyncStorage de react-native
est obsolète, mais Expo recommande de continuer à l'utiliser
Vous pouvez utiliser un système de gestion d'état global comme MobX ou Redux. Toute modification apportée au magasin déclenchera une mise à jour dans tous les fichiers où le magasin est appelé.
Utiliser AsyncStorage est une autre option, mais elle deviendra bientôt compliquée.