2017-10-05 53 views
1

如果在我的代碼,這個簡單的SectionList定義:陣營本地SectionList具有難以理解流類型的錯誤

const s = (
    <SectionList 
    renderItem={({ item }) => <Text>abc</Text>} 
    renderSectionHeader={({ section }) => <Text>abc</Text>} 
    sections={[{ data: [1, 2, 3], title: 'abc' }]} 
    /> 
); 

和流量生成指整個「標記塊」(這實際上是將複製粘貼此錯誤信息VSCode):

[flow] props of React element `SectionList` (This type is incompatible with See also: React element `SectionList`) 

這裏發生了什麼事?

EDIT我使用

flow-bin: 0.56.0 
react: 16.0.0 
react-native: 0.49.1 

EDIT2所以例如可以減少到這個簡單的線(在不影響錯誤信息):

<SectionList sections={[]} />; 

EDIT3我剛發現流程投訴了React Native庫中定義的幾種類型(主要是關於通用typ類型的缺少類型參數) ES)。我想知道是否應該使用較舊的流水版版本。 React Native和流是否有兼容表?

+0

反應本土您使用的是哪個版本? react-native的代碼包含Flow註釋,因此您可以通過查看SectionList的代碼來準確查看它的期望:https://github.com/facebook/react-native/blob/790eabcdff18470571b3f9a5355c924495015918/Libraries/Lists/SectionList.js –

+0

是的......好吧,我仍然沒有線索。不過,我添加了庫版本號。 – Bastian

+0

react-native的0.49穩定分支使用'^ 0.53.0'作爲流程箱依賴版本。嘗試恢復到v0.53.0。 https://github.com/facebook/react-native/blob/0.49-stable/package.json –

回答

1

我有一個類似的問題,react-native: 0.49.3flow-bin: 0.53.0。從SectionList源檢查類型定義後,得到了它的不用類型的警告如下工作:

type Row = { 
    name: string, 
} 

type Section = { 
    title: string, 
    data: $ReadOnlyArray<Row>, 
} 

const mySections: $ReadOnlyArray<Section> = [...] // your data here 

<SectionList sections={mySections} /> 

所以對我來說,關鍵是用$ReadOnlyArray<T>,而不是Array<T>。也許這對你有幫助!

+0

這不會改變我的任何東西。 – Bastian

1

反應有一個內置的流量類型的部分稱爲SectionBase

import type { SectionBase } from 'react-native/Libraries/Lists/SectionList' 
type Section = SectionBase<DataType> 

因此,基於什麼馬丁回答你可以這樣寫:SectionBase<Row>