9.3收藏功能的实战1

action>popular>index.js
修改 onLoadPopularData 增加参数 favoriteDao
修改 handleData增加参数 favoriteDao
进而需要修改
import { handleData, _projectModels} from '../ActionUtil'

import { handleData, _projectModels} from ‘…/ActionUtil’
export function onLoadPopularData(storeName, url, pageSize, favoriteDao){

handleData(Types.POPULAR_lOAD_SUCCESS, dispatch, storeName, data, pageSize, favoriteDao);

}

export function onLoadMorePopular(storeName, pageIndex, pageSize, dataArray = [], favoriteDao, callBack) {
//只展示修改代码
//本次和载入的最大数量
let max = pageSize * pageIndex > dataArray.length ? dataArray.length : pageSize * pageIndex;
//把projectModels数据 包装一个收藏状态
_projectModels(dataArray.slice(0, max),favoriteDao,data=>{
dispatch({
type: Types.POPULAR_LOAD_MORE_SUCCESS,
storeName,
pageIndex,
projectModels: data,
})
})
}

ActionUtil.js
文件功能描述:
触发popularPage/trendingPage页面的初始化数据请求成功的dispatch,把projectModels展示数据包装成了如下格式
>  this.item = item; //要展示的数据
    this.isFavorite = isFavorite;

做的改变:handleData增加一个参数favoriteDao主要就是去给需要展示的数据加一个isFavorite 状态

export function handleData(actionType, dispatch, storeName, data, pageSize, favoriteDao,params) {

//第一次要加载的数据
let showItems = pageSize > fixItems.length ? fixItems : fixItems.slice(0, pageSize);
_projectModels(showItems,favoriteDao,projectModels=>{
    dispatch({
        type: actionType,
        items: fixItems,
        projectModels:projectModels,
        storeName,
        pageIndex: 1,
        ...params
    })
});

}
/**

  • 通过本地的收藏状态包装Item
  • @param showItems
  • @param favoriteDao
  • @param callback
  • @returns {Promise}
  • @private
    /
    export async function _projectModels(showItems, favoriteDao, callback) {
    let keys = [];
    try {
    // 通过favoriteDao.getFavoriteKeys获取收藏的key
    keys = await favoriteDao.getFavoriteKeys();
    } catch (e) {
    console.log(e);
    }
    let projectModels = [];
    for (let i = 0, len = showItems.length; i < len; i++) {
    //checkFavorite 根据收藏的Key去匹配展示的Item,如果有,说明已收藏,否者,未收藏
    //projectModels是个对象???
    projectModels.push(new ProjectModel(showItems[i], Utils.checkFavorite(showItems[i], keys)));
    }
    doCallBack(callback,projectModels);
    }
    export const doCallBack = (callBack, object) => {
    if (typeof callBack === ‘function’) {
    callBack(object);
    }
    };
    import ProjectModel from “…/model/ProjectModel”;
    /
    *
  • 带收藏状态的item
  • @param item
  • @param isFavorite
  • @constructor
    */
    export default function ProjectModel(item, isFavorite) {
    this.item = item;
    this.isFavorite = isFavorite;
    }
BaseItem.js

static propTypes = {
projectModel: PropTypes.object,
onSelect: PropTypes.func,
onFavorite: PropTypes.func,
};

由于action里面的函数都发生了变法因为所调用函数的页面也需要做相应的处理
popularPage.js

import FavoriteDao from “…/expand/dao/FavoriteDao”;
import {FLAG_STORAGE} from “…/expand/dao/DataStore”;
import FavoriteUtil from “…/util/FavoriteUtil”;
const favoriteDao = new FavoriteDao(FLAG_STORAGE.flag_popular);

//都增加一个参数
const mapDispatchToProps = dispatch => ({
onLoadPopularData: (storeName, url, pageSize, favoriteDao) => dispatch(actions.onLoadPopularData(storeName, url, pageSize, favoriteDao)),
onLoadMorePopular: (storeName, pageIndex, pageSize, items, favoriteDao, callBack) =>
dispatch(actions.onLoadMorePopular(storeName, pageIndex, pageSize, items, favoriteDao, callBack))
})
//设置key 的时候 数据已经变了
keyExtractor={item => “” + item.item.id}//key值变化了

renderItem(data) {
const item = data.item;
return <PopularItem
projectModel={item}
onSelect={() => {
NavigationUtil.goPage({
projectModel: item,
}, ‘DetailPage’)
// this.props.navigation.navigate(‘tab1’);//跳转到createMaterialTopTabNavigator中的指定tab,主要这个navigation一定要是在跳转到createMaterialTopTabNavigator中的指页面获取的
}}
//onFavorite函数很多页面都可以用到所以单独提取出来了
//flag用于标识来自trendingPage模块还是popularPage模块
//flag用于key的生成
//这个函数用于回调更改每个Item的收藏状态
onFavorite={(item, isFavorite) => FavoriteUtil.onFavorite(favoriteDao, item, isFavorite, FLAG_STORAGE.flag_popular)}
/>
}
//增加一个参数
if (loadMore) {
onLoadMorePopular(this.storeName, pageIndex, pageSize, store.items, favoriteDao, callback => {
this.refs.toast.show(‘没有更多了’);
})
} else {

        onLoadPopularData(this.storeName, url, pageSize, favoriteDao)
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值