2017-01-25 4 views
1

db-models에서 ListView로 가져 오려고합니다. 여기 내 코드는 다음과 같습니다.React db-models에서 기본 가져 오기

export default class todoDB extends Component { 
constructor(props) { 
    super(props); 
    this.state = { 
     dataSource : new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}) 
    }; 

} 
componentDidMount() { 
    this.fetchData(); 

} 
fetchData() { 
    DB.users.get_all(function(result) { 
     let data = []; 
     for(let i = 1; i <= result.totalrows; i++) { 
      data.push(result.rows[i]); 
     } 
     this.setState({ 
      dataSource: dataSource.cloneWithRows(data), 

     }) 

    }); 

} 
render() { 
    return (
     <ListView 
      dataSource={this.state.dataSource} 
      renderRow={this.renderList} 
      /> 
    ); 
} 
renderList (item) { 
    return (
     <View> 
      <Text>{item.age}</Text> 
     </View> 
    ); 
}}; 

실행 후 오류 또는 출력이 없으면 빈 화면 만 있습니다. "반응"

  • 사용하여 I : "15.4.2",
  • "반응 네이티브": "0.40.0"
  • "반응 - 기본 - DB-모델을": "^ 0.1. 3 "
+0

은'''this''' 함수 안에 있습니다 (결과), 여전히 클래스에 바인딩되어 있습니까? –

+0

'fetchData()'에 에러가 있다고 생각합니다.'setState'에서'dataSource : this.state.dataSource.cloneWithRows (data)'가되어야합니다. – kuby

+0

@kuby 당신이 맞다고 생각하지만, '''prevState''' 예 :'''this.setState ((prevState, props) => {})'''(https://facebook.github.io/react/docs/react-component.html##) 정가) –

답변

3

나는 그것을 테스트하지 않은하지만 당신이 시도 할 수 :

fetchData() { 
    DB.users.get_all((result) => { 
     let data = []; 
     for (let i = 1; i <= result.totalrows; i++) { 
     data.push(result.rows[i]); 
     } 
     this.setState((prevState) => (
     { 
     dataSource: prevState.dataSource.cloneWithRows(data) 
     })); 

    }); 
    } 

변경됩니다 : 0의 범위를 유지하기 위해 화살표 기능을 대신 function(result)의를 사용하여 prevState를 사용하는 이유에 관해서는및 이전 상태 prevState.dataSource.cloneWithRows(data)를 업데이트 (코드 dataSource에서 것은 여기에 정의되지 않은이었다)

, 그것은 불변성을 유지하는 것입니다. 여기에 조금 더 많은 정보가 있습니다 : https://facebook.github.io/react/docs/react-component.html#setstate

+0

감사합니다. 그것은 작동합니다. – Vadim