React Native ListView not rendering correctly in Redux -


i have been trying figure out why listviews not rendering in react native redux. app build deck management syste. deck has set of playing cards associated it. want render decks before add card.

deckactions.js

import { actiontypes } '../constants/actions';  let did=0;  export function adddeck(decktitle){     return {         type: actiontypes.add_new_deck,         payload:{             deckid: "deck-" + did++,             decktitle     } }; 

deckreducer.js

import { actiontypes } 'constants/actions'; import { combinereducers } 'redux';   function adddeckentry(state, action){     const {payload} = action;     const {deckid, decktitle} = payload;     const deck = {id: deckid, title: decktitle};      return {         ...state,         [deckid]: deck     }; }  function adddeckbyid(state, action){     const{payload} = action;     const {deckid} = payload;      return state.concat(deckid); }  function decksbyid(state={}, action){     switch(action.type){         case actiontypes.add_new_deck:             return adddeckentry(state, action);         default:             return state;     }; }  function getalldecks(state=[], action){     switch(action.type){         case actiontypes.add_new_deck:             return adddeckbyid(state, action);         default:             return state;     } }  const decksreducer = combinereducers({     byid: decksbyid,     allids:getalldecks, });  export default decksreducer; 

store.js

import { createstore, combinereducers } 'redux'; import cardsreducer 'reducers/cardreducer'; import decksreducer 'reducers/deckreducer'; import devtoolsenhancer 'remote-redux-devtools';  const rootreducer = combinereducers({     decks: decksreducer });  export default function configurestore(){     let store = createstore(rootreducer, devtoolsenhancer());     return store; } 

root.js

import react, { component } 'react'; import {   alert,   view,   text,   listview,   stylesheet, } 'react-native'; import { button, forminput } 'react-native-elements'; import { adddeck } 'actions/deckactions'; import { bindactioncreators } 'redux'; import { connect } 'react-redux';  export class root extends component{     constructor(props){         super(props);         let datasource = new listview.datasource({             rowhaschanged: (r1, r2) => r1 !== r2         });           this.state={             deckname: '',             datasource: datasource,         };          this.onadddeck = this.onadddeck.bind(this);         this.adddeck = adddeck     }       componentwillreceiveprops(nextprops) {         if (nextprops.decks.byid !== this.props.decks.byid){             let data = this._getlistviewdata(nextprops.decks);             //alert(nextprops.decks.byid.length);                    this.setstate({                 datasource: this.state.datasource.clonewithrows(data)             });         }     }      _getlistviewdata(decks){         let datas = [];          datas = decks.map((deck) => {             return deck;         });         alert(datas.length);         return datas;     }      _setdeckname(name){         this.setstate({deckname: name});     }      onadddeck(){         this.props.adddeck(this.state.deckname);     }      _renderrow(rowdata){         return(             <view style={styles.listitem}>                 <text>{rowdata.decktitle}</text>             </view>         );     }      render(){         return(             <view style={styles.container}>                 <view>                     <forminput                          placeholder={"card topic"}                         inputstyle={styles.input}                         onchangetext={(value) => this._setdeckname(value)}                     />                     <button                         small                         raised                          onpress={this.onadddeck}                         buttonstyle={styles.btnstyle}                         containerviewstyle={styles.btnstyle}                         title={"submit"}                     />                 </view>                 <listview                      style={{margintop: 25}}                     datasource={this.state.datasource}                     renderrow={(rowdata) => this._renderrow(rowdata)}                 />             </view>         );     } }  root.proptypes = {     adddeck : react.proptypes.func.isrequired, }  const styles=stylesheet.create({     container:{         flex:1,         backgroundcolor: 'rgba(0,20,90,0.4)',         justifycontent: 'center',         alignitems: 'center',     },      btnstyle:{         backgroundcolor: 'rgb(0, 100, 255)',         borderradius: 10,     },      input:{         color: '#fff',         fontsize:30,     },      listitem:{         flexdirection: 'row',     },  });  function mapstatetoprops(state){     return{         decks: state.decks,     }; }  function mapdispatchtoprops(dispatch){      return {         adddeck: (decktitle) => {dispatch(adddeck(decktitle))},     }; }  export default connect(     mapstatetoprops,     mapdispatchtoprops, )(root); 

index.android.js

import react, { component } 'react'; import {   appregistry,   view } 'react-native'; import root './containers/screenone'; import { provider } 'react-redux'; import configurestore './redux/store/store';  const mainstore = configurestore();  export default class testapp extends component {   render() {     return (         <provider store={mainstore}>           <root />         </provider>     );   } }  appregistry.registercomponent('testapp', () => testapp); 

could ayone help? tnanks.


Comments

Popular posts from this blog

What is happening when Matlab is starting a "parallel pool"? -

angular - DownloadURL return null in below code -

php - Cannot override Laravel Spark authentication with own implementation -