2016-12-16 39 views
2

我正在使用Firebase child_added列出數據。每當第一行被渲染時,onEndReached被觸發。我的代碼有問題嗎?反應原生onEndReached總是在第一行被渲染時觸發

組件

onEndedReached() { 
lastkey = Object.keys(this.props.contacts).pop(); 
// this.props.nextPage(this.props.auth.uid, lastKey); 
console.log('Fire onEndedReached:', lastkey); 
} 

render() { 
return (
    <ListView 
    style={styles.container} 
    enableEmptySections 
    dataSource={this.dataSource} 
    renderRow={this.renderRow} 
    onEndReachedThreshold={50} 
    onEndReached={() => this.onEndedReached()} 
    /> 
) 
} 
} 

行動

export const getContacts = (uid) => { 
    return (dispatch) => { 
    firebase.database().ref(`userContacts/${uid}`) 
     .limitToFirst(20).on('child_added', (contact) => { 
     dispatch({ 
     type: GET_CONTACTS_SUCCESS, 
     payload: { [contact.key]: contact.val() } 
     }) 
    }) 
    } 
} 

減速

const INITIAL_STATE = {}; 

export default (state = INITIAL_STATE, action) => { 
    switch (action.type) { 
    case GET_CONTACTS_SUCCESS: 
     return Object.assign({}, state, action.payload); 
    default: 
     return state; 
    } 
} 
+0

你使用滾動視圖作爲ListView的容器嗎? –

+0

編號我idid不使用 – vzhen

+0

他們改變了> = 0.36版本的行爲;當你不想讓它觸發時,只需在你的'onEndReached'函數中添加安全措施。 – Jan

回答

2

只需添加上你的onEndReached功能保障,當你不希望它開火。例如

。當你刷新列表視圖時或者它正在獲取數據或者當前數據的長度不符合觸發endReached的要求時。把這一切都置於狀態。

if(this.state.isEndCountZero || this.state.skip < 15 || this.state.onEndReached || this.state.refreshing || this.state.isLoading) { return; } 
+1

對於數據存儲你可以測試'dataStore.getRowCount(0)'。 –

+0

這很奇怪,但當我嘗試使用這些東西時出現錯誤,可能是我應該導入sometings –

相關問題