这节有点难,问题有点多

来源:9-2 收藏功能的实现-1【实战应用】

weixin_慕先生3065687

2019-12-17

  1. 列表项

BaseItem中,
onItemClick() {
this.props.onSelect(isFavorite => {
this.setFavoriteState(isFavorite);
});
}
本质上都是itmeclick,点击事件,
对应的都是对这个空间站的点击
<TouchableOpacity
- onPress={this.props.onSelect}
+ onPress={()=>this.onItemClick()}
这样分开的目的是什么?有点懵圈。

  1. 列表项
    DetailPage的constuctor中
    this.params = this.props.navigation.state.params;
    const {projectModel,flag} = this.params;
    关于projectModel,flag这两项数据怎么在DetailPage中获取到的?是什么时候?用怎样的方式传过去的?按道理projectModel这个数据是通过popular和trending这两个的action传递过来的。只能在PopularPage和TrendingPage中获取,DetailPage中获取不到的吧?
    同样的以为下面的projectModel.isFavorite和callback
    this.state = {
    title: title,
    url: this.url,
  •        canGoBack: false
    
  •        canGoBack: false,
    
  •        isFavorite:projectModel.isFavorite
       };
    
  • onFavoriteButtonClick(){

  •    const {projectModel,callback}=this.params;
    
写回答

1回答

CrazyCodeBoy

2019-12-17

1.两种实现方式效果是一样的,之所以包个方法出来是为了方便以后的扩展;

2.projectModel与flag是在跳转到详情页时传递过去的:

renderItem(data) {
    const {theme} = this.props;
    const item = data.item;
    const Item = this.storeName === FLAG_STORAGE.flag_popular ? PopularItem : TrendingItem;
    return <Item
        theme={theme}
        projectModel={item}
        onSelect={(callback) => {
            NavigationUtil.goPage({
                theme,
                projectModel: item,
                flag: this.storeName,
                callback,
            }, 'DetailPage');
        }}
        onFavorite={(item, isFavorite) => this.onFavorite(item, isFavorite)}
    />;
}

可以对照着这块的课程源码查看下:https://git.imooc.com/coding-304/GitHub_Advanced/src/master/js/page/FavoritePage.js#L142


1
1
weixin_慕先生3065687
多谢老师解答,找到答案了 static goPage(params, page) { const navigation = NavigationUtil.navigation; if (!navigation) { console.log('NavigationUtil.navigation can not be null') return; } navigation.navigate( page, { ...params } ) }
2019-12-18
共1条回复

RN入门到进阶,打造高质量上线App

解锁React Native开发应用新姿势,React Native新版本热门技术

3144 学习 · 3241 问题

查看课程