callback具体怎么执行的?
来源:9-3 收藏功能的实现-2【实战应用】
weixin_慕先生3065687
2019-12-05
return <PopularItem
projectModel={item}
theme={theme}
onSelect={(callback) => {
NavigationUtil.goPage({
theme,
projectModel: item,
flag: FLAG_STORAGE.flag_popular,
callback,
}, ‘DetailPage’)
// this.props.navigation.navigate(‘tab1’);//跳转到createMaterialTopTabNavigator中的指定tab,主要这个navigation一定要是在跳转到createMaterialTopTabNavigator中的指页面获取的
}}
- 将callback传到DetailPage,
- detailpage执行callback(isFavorite);//更新Item的收藏状态,这callback(isFavorite)具体怎么更新isFavorite的?
onFavoriteButtonClick(){
const {projectModel,callback}=this.params;
const isFavorite=projectModel.isFavorite=!projectModel.isFavorite;
callback(isFavorite);//更新Item的收藏状态
this.setState({
isFavorite:isFavorite,
});
let key = projectModel.item.fullName ? projectModel.item.fullName : projectModel.item.id.toString();
if (projectModel.isFavorite) {
this.favoriteDao.saveFavoriteItem(key, JSON.stringify(projectModel.item));
} else {
this.favoriteDao.removeFavoriteItem(key);
}
}
1回答
-
CrazyCodeBoy
2019-12-06
首先在item点击时将item的callback函数传递给详情页对应课程代码:
https://git.imooc.com/coding-304/GitHub_Advanced/src/master/js/page/PopularPage.js#L184
然后当详情页收藏状态发送变化调用callback时,会出发item中的这段代码:
https://git.imooc.com/coding-304/GitHub_Advanced/src/master/js/common/BaseItem.js#L47
从而达到从详情页改变收藏状态后,列表页对应的item也能及时更新的效果。
另外建议通过debug打断点跟踪代码运行的方式体会下代码的整个调用的链路。
10
相似问题