android - 为什么我的 this.setState 在函数中不起作用?
问题描述
export default class Home extends Component {
constructor(props) {
super(props);
this.state = {
checked: false,
};
}
// this.setState is not working here.
changeLike = () => { this.setState({checked: !this.state.checked}) }
_renderItem = ( item ) => {
return(
<View style={styles.news_item}>
<View style={styles.unlikeIcon}>
{ this.state.checked === false &&
<TouchableOpacity onPress={this.changeLike}>
<Image
style={{tintColor: 'red', width: 25, height: 25}}
source={require('../../assets/imgs/unlike.png')}
/>
</TouchableOpacity>
}
{ this.state.checked === true &&
<TouchableOpacity onPress={this.changeLike}>
<Image
style={{tintColor: 'red', width: 25, height: 25}}
source={require('../../assets/imgs/likepic.png')}
/>
</TouchableOpacity>
}
</View>
</View>
);
}
render() {
return(
<View>
<FlatList
data={this.state.data}
keyExtractor={ (index) => index.toString() }
renderItem={ ({item}) => this._renderItem(item) }
/>
</View>
);
}
}
我this.setState
不在_renderItem
从 Flatlist 调用的函数中工作。另外,我没有在 _renderItem 中发布其余代码,因为这里没有必要。
我使用此代码作为复选框替代。请帮忙,我不知道这里有什么问题。我也尝试过使用回调函数setState
解决方案
它实际上正在工作并且状态将正确更新,但 FlatList 不是,因为它仅在this.state.data
更改时重新呈现。如果要使用其他状态或道具更新 FlatList,则需要使用extraData
道具。
<FlatList
data={this.state.data}
keyExtractor={ (index) => index.toString() }
renderItem={ ({item}) => this._renderItem(item) }
extraData={this.state.checked} // this is the magic
/>
推荐阅读
- html - Angular 5 - 带火力的异步管道
- java - Java - 获取侦听端口的服务器的 IP 地址
- java - 布尔字段的 SimpleJdbcInsert 问题
- java - 即使在上面的类中也找不到变量
- javascript - 来自网站的自动电子邮件
- laravel - Vue.js - Buefy 模块(无线电 btns/复选框)
- vbscript - SAP GUI VBScript 通过数据更改剪切和粘贴块
- javascript - 从外部网站截取屏幕截图
- android - 具有自定义适配器的 ListView 在第一次加载程序重新启动时滚动到底部
- jquery - Jquery Post 响应不会使用 .done 方法(linkedin oauth)