2017-07-27 13 views
0

我在試圖找出如何在不傳遞(新)變量的情況下觸發新現代RefreshContainer中的刷新?在沒有(新)變量的現代RefetchContainer中強制重新讀取

我正在尋找最好的方法來實現良好的'拉到刷新React本機列表,應該只需重新查看原始查詢 - 不需要變量?

根據文檔(https://facebook.github.io/relay/docs/api-cheatsheet.html)這應該使用

this.props.relay.refetch({}, callback, {force: true})

是可能的,但我得到一個錯誤說 「不確定是不是( '評估taggedNode.modern')的對象」

enter image description here

查詢工作得很好,如果我使用普通舊FragmentContainer代替,但我只想簡單的拉到刷新功能:-)

編輯 添加更多的代碼爲了清晰。還更新的呼叫,以反映變化的API,包括渲染變量,傳遞null

class HistoryList extends React.PureComponent<void, Props, State> { 
    state = { refreshing: false }; 

    _renderRow = ({ item }) => { 
    return <HistoryListItem item={item.node} />; 
    }; 

    _renderHeader = ({ section }) => { 
    return (
     <Text style={[cs.breadText, _styles.sectionHeader]}> 
     {section.title} 
     </Text> 
    ); 
    }; 

    _onRefresh =() => { 
    this.setState({ refreshing: true }); 
    this.props.relay.refetch({}, null, this._onRefreshDone(), { force: true }); 
    }; 

    _onRefreshDone =() => { 
    this.setState({ refreshing: false }); 
    }; 

    _sortDataIntoSections = (edges: Array<Node>) => { 
    return _.chain(edges) 
     .groupBy(element => { 
     return moment(element.node.huntDate).format('MMMM YYYY'); 
     }) 
     .map((data, key) => { 
     return { title: key, data: data }; 
     }) 
     .value(); 
    }; 

    render() { 
    return (
     <View style={_styles.container}> 
     <SectionList 
      renderSectionHeader={this._renderHeader} 
      sections={this._sortDataIntoSections(
      this.props.entries.allJournalEntries.edges 
     )} 
      renderItem={this._renderRow} 
      keyExtractor={(item, index) => item.node.__id} 
      onRefresh={this._onRefresh} 
      refreshing={this.state.refreshing} 
     /> 
     </View> 
    ); 
    } 
} 

export default createRefetchContainer(
    HistoryList, 
    graphql` 
    fragment HistoryList_entries on Viewer { 
     allJournalEntries(orderBy: huntDate_DESC) { 
     count 
     edges { 
      node { 
      huntDate 
      ...HistoryListItem_item 
      } 
     } 
     } 
    } 
    ` 
); 

回答

1

的溶液在github已經發現robrichard。

我錯過了RefetchContainer的第三個參數,它是在重新讀取時執行的查詢。這與@zetavg的建議相結合是需要的。

導出模塊現在看起來是這樣的:

export default createRefetchContainer(
    HistoryList, 
    { 
    entries: graphql` 
     fragment HistoryList_entries on Viewer { 
     allJournalEntries(orderBy: huntDate_DESC) { 
      count 
      edges { 
      node { 
       huntDate 
       ...HistoryListItem_item 
      } 
      } 
     } 
     } 
    ` 
    }, 
    graphql` 
    query HistoryListRefetchQuery { 
     viewer { 
     ...HistoryList_entries 
     } 
    } 
    ` 
); 
1

看來的this.props.relay.refetch參數已經改變refetch(refetchVariables, renderVariables, callback, options)(在https://facebook.github.io/relay/docs/refetch-container.html)和cheetsheet已經走出過期。

我不知道在哪個版本,這已經改變,但你可以給它一個嘗試,你的代碼更改爲:

this.props.relay.refetch({}, null, callback, {force: true}) 
+2

你說得對!但不幸的是,它也不起作用: - / – jhm