前言

最近在学习React,为了在学习的同时巩固一下所学内容,决定仿一个《快看漫画》的网页;由于学习进度及时间问题,我只实现了网站的部分功能:登录与退出、对应漫画关注/取关、关键词搜索等。
项目写了一个星期,写的时候觉着自己写了好多呀;写完之后就发现怎么才这么点。。。但是就这么一点点我也厚着脸皮写文章了,希望能给新手起到参考作用;同时虚心向各路大佬请教。
——by不会写文章的前端小白

详细介绍

1.  技术栈与组件库

  • react-reudx:  解决组件间通信
  • redux-thunk:  异步操作中间件
  • reac-router-dom:  SPA单页面开发
  • axios:  异步获取数据
  • react-transition-group:  实现简单动画样式
  • immutable.js:  让数据类型不可变
  • styled-components:  样式编写库

2.  目录列表

├── ...
├── ...
├── ...
├── public
│   ├── api                         // 模拟数据存放目录
├── src                             // 开发目录
│   ├── common                      // 公共组件
│   ├── pages                       // 页面
│   │   ├── detail                  // 详情页
│   │   ├── home                    // 首页
│   │   ├── login                   // 登录页
│   ├── statics                     // 静态图片资源
│   ├── store                       // 总存储仓库目录
├──  App.js
├──  index.js
├──  style.js                       // 样式文件
├── ...
├── ...
├── ...

3.  功能介绍

'登录/退出' 功能:

通过设置登录状态(true or false)来判断是否登录,同时通过ref属性取到用户名,传给User组件将用户名渲染到页面。


'关注/取消关注' 功能:

点击关注时获取相应漫画id并集合成数组;点击取消关注时获取当前项漫画id,通过indexOf找到对应id后dispatch出漫画信息,再将对应漫画项移除。


部分代码:

对应漫画'关注/取消关注'按钮显示:

{//this.followItem获取当前已关注列表,this.list.id为当前项漫画idisLogin && this.checkFollowed(this.followItem, this.list.id) ? <Follow className="btn other" onClick={() => cancleFollowed(this.list.id, this.followItem)}>取消关注</Follow> :<Follow className="btn other"onClick={() => followCartoon(this.props.list, this.list.id, isLogin)}>关注</Follow>
}----------------------------------------------------------------------
checkFollowed(newList, id)  {const arr = [];for(let i = 0; i < newList.length; i   ) {// 集合已关注漫画项idarr.push(newList[i].id)}// 若当前项漫画id存在于id集合中  返回true 显示'取消关注'if(arr.indexOf(id) >= 0) return true;
}

点击'取消关注'移除对应漫画项:

// 派发action,传入当前项漫画id及'已关注'漫画数组
cancleFollowed(id, list) {dispatch(actionCreators.cancleFollowed(id, list));
}
-----------------------------------------------------------------------------
export const cancleFollowed = (id, list) => {return dispatch => {const arr = [];for (let i = 0; i < list.length;  i  ) {// 判断当前项漫画是否存在于'已关注'列表// 若有则移除当前项并将新列表数组派发给reducer// reducer接受新列表数组并更新state,完成漫画取关if (list[i].id !== id) {arr.push(list[i]);}}dispatch(searchFollowed(arr));}
};

关键词搜索功能:

可以通过漫画名及作者来搜索相应漫画(当然都是假数据),页面上显示的漫画我都做了其他的我就没做了哈。

这部分逻辑与'关注/取关'相似,也是通过获取input的value值,用indexOf()方法判断是否存在于关键词列表里(事先写好的假数据,包括作品名和作者);再dispatch出对应项id,根据id集合对应漫画项信息,然后就可以渲染到界面上。


结束语

写这篇文章的目的就是记录一下我的学习情况,鼓励自己继续往下学,还想要整理一下我的思路(其实挺乱的吧),对这个项目感兴趣的小伙伴可以去查看我的项目地址(贴在下面啦)。

本人前端新手,希望各位小(da)伙(lao)伴多给我一点意见,感谢!

欢迎交流٩(๑❛ᴗ❛๑)۶

微信:LYX0_0TXRY

QQ:295510545

附上我的项目地址:Lesta


实战:React全家桶仿PC端《快看漫画》(部分)相关推荐

  1. 基于React全家桶开发「网易云音乐PC」项目实战(一)

    网易云音乐PC项目实战 项目简介 1.项目介绍 项目使用到的技术栈 CSS使用Flex进行布局 配置路径别名使用: carco 项目路由使用: react-router来管理 使用react-rout ...

  2. react全家桶实战(千峰教育)

    说明:本笔记为本人基于千锋教育2022版React全家桶教程_react零基础入门到项目实战完整版的学习笔记,知识点不清或不全,可以到视频教程中学习 文章目录 一.安装create-react-app ...

  3. 视频教程-React 全家桶从入门到实战到源码-其他

    React 全家桶从入门到实战到源码 上市公司前端开发工程师,专注于 React 技术栈,对 React 全家桶从 react-router 路由到 Redux 状态管理工具再到 webpack 打包 ...

  4. React全家桶+AntD 实战二

    React全家桶+AntD 单车后台管理系统开发(完整版) (第8章 单车业务之城市管理模块&) 第8章 单车业务之城市管理模块& src/router.js,通用路由 import ...

  5. React全家桶写一个CNode社区,奉上心得与源码

    webpack2+react+react-router+react-redux+ES6+antd-mobile版本的Cnode 苦于我就职的公司的技术栈还是ES5+jQ+handelbars, 而我一 ...

  6. React 全家桶入门教程 01

    React 全家桶入门教程 01 前面是基础课程(难度小,略过),后面是案例 目的 巩固react基础知识,查漏补缺(熟悉的部分快进) 学习相关的库的使用 https://study.163.com/ ...

  7. vue全家桶和react全家桶

    感谢内容提供者:金牛区吴迪软件开发工作室 今天笔者就简单的给大家介绍一下一般项目在开发的时候所提到的vue全家桶和react全家桶分别都包括哪些内容. vue全家桶: vue(整体架构) +  vue ...

  8. 技术胖的2019新版React全家桶免费视频(84集)

    技术胖 2019年09月18日 阅读 29883 关注 技术胖的2019新版React全家桶免费视频(84集) 一共84集,从5月4日开始录制,到9月18日完成,5个月时间.如果是一个专业讲师,这进度 ...

  9. 从零搭建React全家桶框架教程

    从零搭建React全家桶框架教程 源码地址:https://github.com/brickspert/react-family 欢迎star 提问反馈:blog 原文地址:https://githu ...

最新文章

  1. mysql数据库授权
  2. Apache CXF实现Web Service(3)——Tomcat容器和不借助Spring的普通Servlet实现JAX-RS(RESTful) web service...
  3. Python 2 最后一个版本发布,正式迈入 Python 3 时代
  4. java写一个web聊天工具_javaweb写的在线聊天应用
  5. 7-46 银行排队问题之单队列多窗口服务 (10 分)
  6. 空间计量模型_截面数据空间计量模型空间误差模型及Stata操作和应用
  7. 实现IMSI、IMEI查询
  8. PostgreSQL and SQLAlchemy [ubuntu]
  9. PGM:不完备数据的参数估计
  10. centos下yum安装lamp
  11. 用Java实现邮件的发送
  12. python转exe遇到的坑及解决方案
  13. matlab峰度和偏度,峰度和偏度
  14. 用python+turtle画太阳花
  15. Mac Photoshop 替代品 Pixelmator Pro 2.4 新功能一览
  16. 利用echarts做图表统计
  17. 006. 分割回文串
  18. javafx label设置字体大小_如何把智能手机,设置成老年人模式?
  19. 如何应对大数据的三大挑战?
  20. Qt QSqlQueryModel详解

热门文章

  1. 贪心NLP——jieba分词、停用词过滤、词的标准化,词袋模型
  2. vue create is a Vue CLI 3 only command and you are using Vue CLI 2.9.6. You may want to run the fol
  3. DevOps 的分与合
  4. IOS微信跳一跳调试
  5. 雷林鹏分享:C# 程序结构
  6. 华为mate40和mate40pro的区别?哪个好?
  7. 时序预测 | MATLAB实现SARIMA时间序列预测
  8. 整洁的commit 之 git rebase 的使用
  9. 【matlab 图像处理】离散傅里叶变换离散余弦变换K-L变换小波变换
  10. 当下的网络安全行业前景到底怎么样?还能否入行?