Académique Documents
Professionnel Documents
Culture Documents
1
Parcours Cours Alternance Employeurs
Accueil > Cours > Développez une application mobile React Native > Ajoutez des fonctionnalités sur un
component
( )
Maîtrisez les
Ajoutez des fonctionnalités sur un + bases de React ,
Native
component
1. Faites vos premiers
pas avec les
components React
2. Appliquez des
styles à vos
components
3. Construisez vos
vues avec Flexbox
5. Manipulez le State
6. Ajoutez des
fonctionnalités sur
00:31 un component
7. Appréhendez le
"setState"
Vous allez voir qu'avec tout ce que l'on a déjà appris, on est en
mesure de créer des fonctionnalités vraiment sympas et très
rapidement.
06:27
à ceci :
json
1 "poster_path": "/dHhyFNvAGnc1vtXWXWnnEfG1dLO.jpg"
1 // API/TMDBApi.js
2
3 export function getImageFromApi (name) {
4 return 'https://image.tmdb.org/t/p/w300' + name
5 }
Ici, je vous avoue que vous n'auriez pas pu le deviner, en tout cas
pour l'URL complète. L'API TMDB nous permet également de
récupérer une taille particulière pour notre image. Ici, j'ai demandé
une image avec une largeur de 300.
1 // Components/FilmItem.js
2
3 import { getImageFromApi } from '../API/TMDBApi'
4
5 // ...
6
7 <Image
8 style={styles.image}
9 source={{uri: getImageFromApi(film.poster_path)}}
10 />
C'est quand même plus joli comme ça. Vous pouvez également
enlever le style backgroundColor gris que l'on a mis sur l'image, il
ne sert plus à présent.
clavier
On continue avec une fonctionnalité très facile à mettre en place et
qui offre une bien meilleure expérience utilisateur. Actuellement,
pour rechercher des films, on tape du texte dans notre TextInput et
on clique sur le Button "Rechercher". Certains utilisateurs, comme
moi, ont l'habitude d'appuyer sur le bouton "Envoyer" du clavier
pour valider un TextInput. C'est très facile à faire, mais cela a le
mérite de vous faire rechercher dans la documentation React
Native.
1 <TextInput
2 style={styles.textinput}
3 placeholder='Titre du film'
4 onChangeText={(text) =>
this._searchTextInputChanged(text)}
5 onSubmitEditing={() => this._loadFilms()}
6 />
Gestion du chargement
1 // Components/Search.js
2
3 this.state = {
4 films: [],
5 isLoading: false // Par défaut à false car il n'y a pas de
chargement tant qu'on ne lance pas de recherche
6 }
1 // Components/Search.js
2
3 _loadFilms() {
4 if (this.searchedText.length > 0) {
5 this.setState({ isLoading: true }) // Lancement du
chargement
6
getFilmsFromApiWithSearchedText(this.searchedText).then(data
=> {
7 this.setState({
8 films: data.results,
9 isLoading: false // Arrêt du chargement
10 })
11 })
12 }
13 }
1 // Components/Search.js
2
3 render() {
4 console.log(this.state.isLoading)
5 return ( ... )
6 }
Vous devriez voir, dans vos logs, quelque chose comme ceci :
13:49:32: false
13:49:33: true
13:49:33: false
À présent, il faut :
Gestion de l'ActivityIndicator
On va créer une fonction qui va gérer tout cela pour nous et, vous
allez le voir, c'est très simple :
jsx
1 // Components/Search.js
2
3 import { ..., ActivityIndicator } from 'react-native'
4
5 class Search extends React.Component {
6
7 // ...
8
9 _displayLoading() {
10 if (this.state.isLoading) {
11 return (
12 <View style={styles.loading_container}>
javascript
1 // Components/Search.js
2
3 const styles = StyleSheet.create({
4 ...
5 loading_container: {
6 position: 'absolute',
7 left: 0,
8 right: 0,
9 top: 100,
10 bottom: 0,
11 alignItems: 'center',
12 justifyContent: 'center'
13 }
14 })
1 // Components/Search.js
2
3 render() {
4 return (
5 <View style={styles.main_container}>
6 <TextInput
7 style={styles.textinput}
8 placeholder='Titre du film'
9 onChangeText={(text) =>
this._searchTextInputChanged(text)}
10 onSubmitEditing={() => this._loadFilms()}
11 />
12 <Button title='Rechercher' onPress={() =>
this._loadFilms()}/>
13 <FlatList
14 data={this.state.films}
15 keyExtractor={(item) => item.id.toString()}
16 renderItem={({item}) => <FilmItem film={item}/>}
17 />
18 {this._displayLoading()}
19 </View>
20 )
21 }
Je suis passé un peu vite ici, mais vous avez vu que l'on peut
appeler des fonctions dans le render de notre component.
Attention, toutefois, ces fonctions appelées dans le render
doivent obligatoirement retourner des éléments
graphiques, soit en React Native, des components (React
Native ou custom). Vous pouvez toujours essayer de
retourner autre chose, return "Coucou" , par exemple.
Cela ne fonctionnera pas et votre application va planter.
1 // Components/Search.js
2
3 render() {
4 return (
5 <View style={styles.main_container}>
6 <TextInput
7 style={styles.textinput}
8 placeholder='Titre du film'
9 onChangeText={(text) =>
this._searchTextInputChanged(text)}
10 onSubmitEditing={() => this._loadFilms()}
11 />
12 <Button title='Rechercher' onPress={() =>
this._loadFilms()}/>
13 <FlatList
14 data={this.state.films}
15 keyExtractor={(item) => item.id.toString()}
16 renderItem={({item}) => <FilmItem film={item}/>}
17 />
18 { this.state.isLoading ?
19 <View style={styles.loading_container}>
20 <ActivityIndicator size='large' />
21 </View>
22 : null
23 }
24 </View>
25 )
26 }
Vous voyez qu'avec tout ce que l'on a déjà appris, on est capable
de créer des fonctionnalités vraiment sympas, simplement et très
rapidement.
APPRÉHENDEZ LE
+ MANIPULEZ LE STATE ,
"SETSTATE"
Vidéo
Forum Conditions
Blog Générales
d'Utilisation
Nous rejoindre
Politique de
Protection des
Données
Personnelles
Nous contacter