React-native tutorial #2 : Make movie search application step by step
After finish this tutorial we can build something like this.
 
So let's start.
First we gonna break down the layout, create a project structure  and make a check list what we gonna use to make this. 
#1 : Create TabBarIOS
#2 : Create Navigator
#3 : Create a Listview , pull to refresh
#4 : Load and parse data
#5 : Create movie items, bind data to Listview
#6 : Create a search bar, excuse seach function
#7 : Create and parse data to detail movie screen
#8 : Drag view
#2 : Create Navigator
#3 : Create a Listview , pull to refresh
#4 : Load and parse data
#5 : Create movie items, bind data to Listview
#6 : Create a search bar, excuse seach function
#7 : Create and parse data to detail movie screen
#8 : Drag view
Take note :
/** there is something new in this project , i take note for myself here */
- List of movies currently playing in theaters from The Movie Database
Walkthrough
Navigator pass data to next page
Tabbar
- constructorto set default tab selected
  constructor() {
    super();  
    this.state = {
      selectedTab: 'homeTab',
    };
  }
  return (
   
      {
         this.setState({
           selectedTab: 'homeTab',
         });
       }}>
       {this._renderContent('#414A8C', 'Home tab')}
      
      {
         this.setState({
           selectedTab: 'newMobieTab',              
         });
       }}>
       {this._renderContent('#783E33', 'Featured Tab')}
      
    
 );  
- _renderContent()
    _renderContent(color: string, pageText: string){
      return (
        <View style={[styles.tabContent, {backgroundColor: color}]}>
          <Text style={styles.tabText}>{pageText}</Text>
          <Text style={styles.tabText}>{num} re-renders of the {pageText}</Text>
        </View>
      );
    }  
Search Bar
- Add textinput and trigger when input change
- Filter function, using javascript search method, example
  var rows = [];
  var title = rowData.title.toLowerCase();
  var desc = rowData.overview.toLowerCase();
  if(title.search(this.state.searchText.toLowerCase()) !== -1 || desc.search(this.state.searchText.toLowerCase()) !== -1){
    return(
    ...
    )
  }
Animation
- Follow example
- Using ScrollView and LayoutAnimation
 
Alternative filter
- Examples
- The concept is you filter when fetch data and update to datasource
 fetch(‘notes’, {
   context: this,
   asArray: true,
   then(data){
     let filteredData = this.filterNotes(searchText, data); // Filter here
     this.setState({
       dataSource: this.ds.cloneWithRows(filteredData),
     });
   }
 });
}
// Process filter data
filterNotes(searchText) {
}
- Loading images
npm install react-native-image-progress --save
npm install react-native-progress --save
movies.js
import Image from 'react-native-image-progress';
import Progress from 'react-native-progress';
...
 
References
  constructor(); // 1. first
  componentWillMount(); // 2 second
  render(); // 3 third
  componentDidMount(); // 4 last
Tips:
Wait to load data from API ? cause JS using async method, so we have to wait util the datasouce has data:
  render(){        
    if(this.state.dataSource.getRowCount() === 0 ){
      var rows = <View><Text>Loading.....</Text></View>
    }else {
      var rows = <ListView
                    dataSource={this.state.dataSource}
                    renderRow={this._renderRow.bind(this)}
                    renderSeparator={this._renderSeparator}
                  />
    }
[Updating....]
Thanks coderschool.vn
 
 
 
 
 
 
No comments: