[英]React Native - Dynamic onPress Event
我是react-native
新手,但是我遇到了一些不確定的問題。
我有一些組件會根據一些API
數據進行動態渲染。
for (var i = 0; i < data.length; i++)
{
categoryComponents.push(
<Card key={data[i].id}>
<CardItem>
<Body>
<TouchableHighlight onPress={(event) => {
const { navigate } = this.props.navigation;
navigate('Category', { category: data[i].id });
}}>
<Text>{data[i].name + " " + data[i].id}</Text>
</TouchableHighlight>
</Body>
</CardItem>
</Card>
);
}
如您所見,我將動態組件存儲在數組中。 我渲染到屏幕上:
render() {
return (
<Container>
<Content style={styles.spacer}>{categoryComponents}</Content>
</Container>
)
}
問題是在我的TouchableHighlight
組件內部, onPress
事件似乎不接受data[i].id
變量。 它拋出一個錯誤,說undefined
。 但是,我在onPress
事件之外使用它,並且它已定義。
我試圖解決此問題,所以更改了代碼:
for (var i = 0; i < data.length; i++)
{
var name = data[i].name;
var id = data[i].id;
categoryComponents.push(
<Card key={id}>
<CardItem>
<Body>
<TouchableHighlight onPress={(event) => {
const { navigate } = this.props.navigation;
navigate('Category', { category: id });
}}>
<Text>{name + " " + id}</Text>
</TouchableHighlight>
</Body>
</CardItem>
</Card>
);
}
如您所見,我只是將要使用的值存儲到局部變量中,並引用這些變量而不是data
。
這不能解決問題,但給了我更多的見解。
現在,我的TouchableHighlight
組件的onPress
事件確實接受了該變量,但它僅使用循環分配的最后一次迭代。
因此,我的id
變量始終在TouchableHighlight
內部的所有組件中分配給9。 即使在onPress
事件外部, id
變量也在更改。
由於這個問題,我的所有鏈接都不是動態的。 如何在TouchableHighlight
組件上具有動態的onPress
事件?
編輯:我使用native-base
的組件。
它與React Native無關,與javascript范圍和閉包有關。
var
聲明一個在function scope
而不是block scope
起作用的變量。
由於onPress方法稱為異步方法,因此i
變量是for loop
之后的值。
將循環變量聲明從var
更改為let
將解決此問題
// let declare a variable works at `block scope`
for (let i = 0; i < data.length; i++){}
您可能想要JavaScript閉包如何工作? 作為參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.