[英]null is not an object when evaluating this.state
我有一個項目清單,我希望在任何給定時間僅突出其中的一個。 我寫了以下代碼:
constructor(props) {
super(props);
this.setState({indexHighlighted: 0});
}
selectItem = (i) => {
this.setState({indexHighlighted: i});
}
checkIfHighlighted = (i) => {
i == this.state.indexHighlighted;
}
render() {
return (
<FlatList
data={myData}
renderItem={ ({item}) =>
<TouchableHighlight onPress={this.selectItem(item["indexNr"])}>
<ShoppingListItem
key={item["indexNr"]}
highlighted = {this.checkIfHighlighted(item["indexNr"])}
orderInList={item["indexNr"]} />
</TouchableHighlight>
}
keyExtractor = {(item, index) => index}
/>
);
}
當我運行此代碼時,我得到的null is not an object (evaluating '_this.state.indexHighlighted')
。
為什么this.state
為null
? 如果我通過構造函數設置它,可以為null
嗎?
如果是,那么如何在適當的時候初始化它,從而不會出現錯誤?
您有2個語法錯誤。
一是您沒有正確設置狀態。 其次,您正在執行函數,而不是將其作為屬性傳遞。
constructor(props) {
super(props);
this.state = {indexHighlighted: 0};
}
<TouchableHighlight onPress={() => this.selectItem(item["indexNr"])}>
// ...
<TouchableHighlight />
您必須將函數綁定到constructor
函數中,如果要向函數發送參數,則應在jsx中定義一個外部函數。 您還應該在checkIfHighlighted
fucn中使用return。
constructor(props) {
super(props);
this.state = {
indexHighlighted: 0
};
this.checkIfHighlighted = this.checkIfHighlighted.bind(this);
this.selectItem = this.selectItem.bind(this);
}
...
checkIfHighlighted (){
return i == this.state.indexHighlighted;
}
...
jsx:
<TouchableHighlight onPress={()=>{this.selectItem(item["indexNr"])}}>
<ShoppingListItem
key={item["indexNr"]}
highlighted = {this.checkIfHighlighted(item["indexNr"])}
orderInList={item["indexNr"]} />
</TouchableHighlight>
在構造函數中,應使用以下語法:
constructor(props) {
super(props);
this.state = {
indexHighlighted: 0
};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.