Tout d'abord, merci pour ce cours. Je l'ai commencé il y a quelques jours et même sans l'avoir fini je l'ai trouvé vraiment bien, tant au niveau de sa construction que de ses explications ! Bon boulo !!! J'ai voulu aujourd'hui continué à suivre ton cours mais le lien ne fonctionne plus malheureusement. Est il possible d'y avoir accès avec un autre lien, ou sur un autre site (ou une autre façon encore) ? Je serai vraiment frustré de ne pas pouvoir continué ton cours car j'avais vraiment aimé découvrir React Native avec. J'espère que tu pourras rediffuser ton cours en tout cas. Encore une fois, bravo, et merci pour ton travail et pour la transmission de tes connaissances
Merci pour ce retour très encourageant. Content de savoir que React Native te plaît ;), je termine en ce moment la rédaction de la 3ème partie.
Concernant le cours, il est toujours, pour ma part je n'ai pas de soucis à y accéder, as-tu toujours le problème ? Et non je n'ai pas d'autres liens à te donner malheureusement, le cours n'est disponible que sur OpenClassrooms.
C'est bon j'ai eu de nouveau l'accès dans l'après-midi, je ne sais pas trop pourquoi j'ai eu ce problème, le lien me redirigeait vers la page 404 d'OpenClassroom ... Je viens tout juste de finir ton cours (du moins jusqu'au point où tu as écrit du contenu). Je reste sur ma première impression, je le trouve bien structuré. Je trouve vraiment bien le fait que tu expliques un concept et qu'ensuite tu proposes au lecteur d'implémenter seul une fonctionnalité utilisant ce concept. En tout cas pour ma part ça m'a obligé à me poser les bonnes questions et d'être "indépendant" un court instant sur du développement avec React Native. Ca donne confiance .
En tout cas je lirai attentivement la suite du cours ! Merci encore !
Petit up pour vous informer que je viens de terminer la partie 3 et que le cours est à 75% terminé.
Dans cette partie j'aborde des notions pour développer des applications mobiles React Native avancées avec :
La navigation entre les vues
Les cycles de vie des components
La gestion d'un store avec Redux
Le data binding
Comme d'habitude n'hésitez pas à me faire vos retours. Merci aux personnes qui m'en ont déjà fait, c'était très sympa et toujours constructif.
J'aurais également aimé avoir un retour des équipes d'OpenClassrooms, si ils passent par là. Le cours se rapproche petit à petit de la fin et je n'ai eu aucun contact, remarques, conseils, etc.
Dernier message avant la finalisation du cours. Il est terminé à
93%
il reste un chapitre sur la mise en ligne des applications et un quiz que je vais ajouter. Comme d'habitude, si vous avez des remarques, des commentaires, n'hésitez pas.
Je viens de terminer ce cours (finalisé à 100%). Il faut compter une trentaine d'heures pour le terminer. Vous y apprendrez comment développer une application mobile sur React Native de A à Z.
J'ai passé beaucoup de temps à écrire ce cours et se fut une super expérience pour moi. J'ai beaucoup apprécié échanger avec certains d'entre vous. Merci à vous pour vos retours qui ont toujours été très constructifs.
Bien sûr je suis conscient que ce cours n'est pas parfait, qu'il y a des pistes à améliorer, n'hésitez pas à me faire des retours, des remarques, des suggestions sur des points pas assez ou trop explicites. Même si vous avez abandonné au bout du premier chapitre tellement c'était soporifique tout commentaire est bon à prendre.
Merci à tous et bon courage pour vos futurs projets en lien, ou non, avec React Native.
Pour information j'ai repris entièrement les chapitres liés à Redux. Après relecture, quelques mois après, ils étaient trop complexe et contenaient quelques erreurs. N'hésitez pas à me faire vos retours.
En me basant sur ton tuto j'essaye de le modifier pour faire une application qui référence tout les stages d’aïkido organisé par mon dojo, je rencontre des problèmes en voulant afficher les détail d'un stage, comme tu le fais avec le détail d'un film.
Je me retrouve dans le state avec un array qui contient l'objet passé au state, le problème est que pour y accéder je suis obligé de faire "state.array[0].id " et non pas "state.array.id" ce qui ne correspond pas du tout a ce que toi tu nous montre dans la partie " .
Pour le moment ça fait le travail mes cela produira peut être des problèmes pour la suite non ???
Je rencontre encore un problème persistant et bizarre, tout fonctionne parfaitement tant que je ne cherche pas a faire persister les données, mais a partir du moment ou j'installe la persistance et la réhydratation des données une erreur est levée.
Je suis toujours en CRNA si j'ai bien lu ça ne devrait pas poser de problème !
17:49:15: Error: Error: Error: TypeError: TypeError: undefined is not an object (evaluating '_this2.props.favoritesStage.findIndex')
This error is located at:
in CellRenderer (at VirtualizedList.js:670)
in RCTView (at View.js:60)
in View (at ScrollView.js:791)
in RCTScrollView (at ScrollView.js:887)
in ScrollView (at VirtualizedList.js:1024)
in VirtualizedList (at FlatList.js:644)
in FlatList (at StageList.js:24)
in StageList (created by Connect(StageList))
in Connect(StageList) (at Search.js:110)
in RCTView (at View.js:60)
in View (at Search.js:102)
in Search (at SceneView.js:10)
in SceneView (at StackViewLayout.js:477)
in RCTView (at View.js:60)
in View (at StackViewLayout.js:476)
in RCTView (at View.js:60)
in View (at StackViewLayout.js:475)
in RCTView (at View.js:60)
in View (at createAnimatedComponent.js:154)
in AnimatedComponent (at StackViewCard.js:12)
in Card (at createPointerEventsContainer.js:28)
in Container (at StackViewLayout.js:539)
in RCTView (at View.js:60)
in View (at StackViewLayout.js:434)
in RCTView (at View.js:60)
in View (at StackViewLayout.js:433)
in StackViewLayout (at withOrientation.js:30)
in withOrientation (at StackView.js:60)
in RCTView (at View.js:60)
in View (at Transitioner.js:169)
in Transitioner (at StackView.js:22)
in StackView (at createNavigator.js:57)
in Navigator (at createKeyboardAwareNavigator.js:11)
in KeyboardAwareNavigator (at createNavigationContainer.js:383)
in NavigationContainer (at SceneView.js:10)
in SceneView (at createTabNavigator.js:10)
in RCTView (at View.js:60)
in View (at ResourceSavingScene.js:14)
in RCTView (at View.js:60)
in View (at ResourceSavingScene.js:10)
in ResourceSavingScene (at createBottomTabNavigator.js:86)
in RCTView (at View.js:60)
in View (at createBottomTabNavigator.js:77)
in RCTView (at View.js:60)
in View (at createBottomTabNavigator.js:76)
in TabNavigationView (at createTabNavigator.js:127)
in NavigationView (at createNavigator.js:57)
in Navigator (at createNavigationContainer.js:383)
in NavigationContainer (at App.js:14)
in PersistGate (at App.js:13)
in Provider (at App.js:12)
in App (at registerRootComponent.js:35)
in RootErrorBoundary (at registerRootComponent.js:34)
in ExpoRootComponent (at renderApplication.js:33)
in RCTView (at View.js:60)
in View (at AppContainer.js:102)
in RCTView (at View.js:60)
in View (at AppContainer.js:122)
in AppContainer (at renderApplication.js:32)
This error is located at:
in NavigationContainer (at SceneView.js:10)
in SceneView (at createTabNavigator.js:10)
in RCTView (at View.js:60)
in View (at ResourceSavingScene.js:14)
in RCTView (at View.js:60)
in View (at ResourceSavingScene.js:10)
in ResourceSavingScene (at createBottomTabNavigator.js:86)
in RCTView (at View.js:60)
in View (at createBottomTabNavigator.js:77)
in RCTView (at View.js:60)
in View (at createBottomTabNavigator.js:76)
in TabNavigationView (at createTabNavigator.js:127)
in NavigationView (at createNavigator.js:57)
in Navigator (at createNavigationContainer.js:383)
in NavigationContainer (at App.js:14)
in PersistGate (at App.js:13)
in Provider (at App.js:12)
in App (at registerRootComponent.js:35)
in RootErrorBoundary (at registerRootComponent.js:34)
in ExpoRootComponent (at renderApplication.js:33)
in RCTView (at View.js:60)
in View (at AppContainer.js:102)
in RCTView (at View.js:60)
in View (at AppContainer.js:122)
in AppContainer (at renderApplication.js:32)
This error is located at:
in NavigationContainer (at App.js:14)
in PersistGate (at App.js:13)
in Provider (at App.js:12)
in App (at registerRootComponent.js:35)
in RootErrorBoundary (at registerRootComponent.js:34)
in ExpoRootComponent (at renderApplication.js:33)
in RCTView (at View.js:60)
in View (at AppContainer.js:102)
in RCTView (at View.js:60)
in View (at AppContainer.js:122)
in AppContainer (at renderApplication.js:32)
- node_modules\react-navigation\src\createNavigationContainer.js:289:24 in componentDidCatch
- node_modules\react-native\Libraries\Renderer\ReactNativeRenderer-dev.js:10732:41 in commitErrorLogging
- node_modules\react-native\Libraries\Renderer\ReactNativeRenderer-dev.js:12521:27 in commitAllLifeCycles
- node_modules\react-native\Libraries\Renderer\ReactNativeRenderer-dev.js:39:15 in invokeGuardedCallback
- node_modules\react-native\Libraries\Renderer\ReactNativeRenderer-dev.js:221:34 in invokeGuardedCallback
- node_modules\react-native\Libraries\Renderer\ReactNativeRenderer-dev.js:12677:10 in commitRoot
- node_modules\react-native\Libraries\Renderer\ReactNativeRenderer-dev.js:13685:46 in completeRoot
- node_modules\react-native\Libraries\Renderer\ReactNativeRenderer-dev.js:13635:23 in performWorkOnRoot
- node_modules\react-native\Libraries\Renderer\ReactNativeRenderer-dev.js:13545:26 in performWork
- node_modules\react-native\Libraries\Renderer\ReactNativeRenderer-dev.js:13506:16 in performSyncWork
- node_modules\react-native\Libraries\Renderer\ReactNativeRenderer-dev.js:13392:6 in requestWork
- node_modules\react-native\Libraries\Renderer\ReactNativeRenderer-dev.js:13259:24 in scheduleWorkImpl
- node_modules\react-native\Libraries\Renderer\ReactNativeRenderer-dev.js:13207:28 in scheduleWork
- node_modules\react-native\Libraries\Renderer\ReactNativeRenderer-dev.js:6224:19 in enqueueSetState
- node_modules\react\cjs\react.development.js:242:31 in setState
* Components\Search.js:72:20 in <unknown>
- node_modules\promise\setimmediate\core.js:37:14 in tryCallOne
- node_modules\promise\setimmediate\core.js:123:25 in <unknown>
- ... 10 more stack frames from framework internals
Je vous poste les fichiers modifiés
// Store/configureStore.js
import { createStore } from 'redux'
import toggleFavorite from './Reducers/favoriteReducer'
import { persistCombineReducers } from 'redux-persist'
import storage from 'redux-persist/lib/storage'
const rootPersistConfig = {
key: 'root',
storage: storage
}
export default createStore(persistCombineReducers(rootPersistConfig, {toggleFavorite}))
le App.js
import React from 'react'
import Navigation from './Navigation/Navigation'
import {Provider} from 'react-redux'
import Store from './Store/configureStore'
import { persistStore } from 'redux-persist'
import { PersistGate } from 'redux-persist/es/integration/react'
export default class App extends React.Component {
render() {
let persistor = persistStore(Store)
return (
<Provider store={Store}>
<PersistGate persistor={persistor}>
<Navigation />
</PersistGate>
</Provider>
)
}
}
et le fichier ou ce trouve la fonction qui poserait problème :
Effectivement le fait d'être sur une CRNA ne pose aucun problème.
L'erreur vient du fait que this.props.favoritesStage est undefined dans le component StageDetail.
En fait, tu as utilisé la fonction persistCombineReducers de redux-persist. Lorsque tu utilises la fonction "combine", dans tes components, tu dois spécifier dans quel reducer aller chercher la donnée.
Merci pour le cours, il est vraiment bien expliqué et la lecture est vraiment agréable. Le projet réalisé est très intéressant pour pouvoir développer ses propres application.
J'ai appris ton cours en entier, il me reste simplement les deux derniers carrés du cours. Je fais des études en dév depuis 2 ans, j'ai acquis la grosse majorité de mes bases grâce aux tutoriels d' Openclassroom que ce soit en Web ou mobile.
Comment te dire que ce tutoriel est parfait et je pèse mes mots, j'en ai lu pleins et celui-ci est le plus agréable à suivre, le plus complet, c'est d'ailleurs le seul que j'ai fini jusqu'au bout. Tu sais te mettre à la place de tes lecteurs car tu as toujours le bon réflexe d'expliquer toutes les petites choses qui peuvent paraitre compliquer pour un débutant sans rien laisser de côté, et tu nous permets bien d'allier la théorie à la pratique en étant autonome, ce qui fait qu'à la fin de chaque chapitre j'ai toujours tout très très bien compris.
Parcontre je pense avoir déceler une erreur:
Quand on fait une recherche d'un film, après que le chargement des premiers films soit terminé, si on supprime le contenu de l'inputText l'application ne charge plus la suite de la liste des films quand on scroll vers le bas. Ceci est peut-être du au fait que dans la condition de la fonction pour charger les films, on avait écrit que pour charger la suite de la liste de film il fallait que le contenu de l'inputText face + de 0 caractère, or si on supprime le contenu de l'inputText la condition n'est plus rempli donc ça ne charge plus. C'est bien ça?
Merci pour ton retour très encourageant, content de savoir que le cours t'a plu
Concernant ton erreur, que dire à part que tu as parfaitement raison
Pour être honnête je n'ai jamais pensé à tester ce cas mais, effectivement, le chargement de plus de films ne marchera pas, bien vu ! Lorsqu'on change le texte du TextInput, on met à jour la variable searchedText. Variable qui est utilisée pour charger plus de films.
Pour corriger cette anomalie, il faudrait stocker, dans une nouvelle variable, le texte recherché lorsqu'on lance une nouvelle recherche (dans la méthode _searchFilms) et utiliser cette variable pour charger plus de films.
Je ne pense pas corriger cette anomalie dans le cours, cela le rendrait moins clair et long sur un chapitre sur le state déjà complexe. Mais vraiment merci beaucoup pour cette info et ce retour.
Souhaitant apprendre React Native puis Redux une fois le cours ReactJs terminé, je me pose une question toute bête (je m'excuse pas avance de celle-ci) dont je n'ai pas trouvé de réponse
Si je souhaite développer un site web ainsi que les applications mobile associé, est-ce que je dois pour le front de la partie site web utiliser ReactJs et pour les applications mobiles React Native ou est-ce React Native permet aussi bien de développer le côté site web que mobile?
La question n'est pas bête mais non, React Native n'est pas pensé pour faire du web. Il existe des librairies qui permettent toutefois de rendre une application React Native dans un navigateur web, comme https://github.com/necolas/react-native-web et sa démo https://necolas.github.io/react-native-web/examples/ mais je te le déconseille. Le projet reste récent et le rendu est très très proche du mobile, tu risques d'être rapidement bloqué si tu as une idée précise de ce que tu souhaites côté web.
Le mieux reste d'utiliser React Native pour tes applications mobiles et React JS pour ton site web.
Merci pour cette excellent tutoriel, probablement l'un des mieux rédigé que j'ai pu lire. Il est parfaitement adapté à des débutants !
Le fais que tu nous proposes tous un tas de petites améliorations est un gros plus, on apprécie d'autant plus l'apprentissage et l'on se projette plus facilement sur nos projets futur
Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native
Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native
Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native
Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native
Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native
Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native
Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native
Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native
Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native
Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native
Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native
Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native
Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native
seyeAda