一篇文章教你用React实现菜谱系统
目录
- 一、菜谱大全
- 1.1、项目背景
- 1.2、技术栈
- 1.3、开发环境
- 1.4、项目效果展示
- 1.5、项目初始化
- 二、首页开发
- 2.1、antd-mobile 组件库
- 2.2、底部导航实现
- 2.3、菜谱大全顶部导航
- 2.4、轮播显示
- 2.5、mock 数据
- 2.6、搜索组件
- 2.7、热门分类
- 2.8、精品好菜
- 三、分类开发
- 3.1、分类顶部切换
- 3.2、列表展示
- 总结
一、菜谱大全
1.1、项目背景
【一篇文章教你用React实现菜谱系统】当下回家吃饭健康饮食的理念正在兴起。据调查显示,有超过九成的都市白领及年轻人其实都倾向于在家里吃饭,尤其是有小孩的家庭意愿会更加强烈, 因为他们普遍都认为在家里吃饭的幸福感会更高; 随着经济的快速发展,人们的生活水平的逐渐提高,对饮食质量要求也越来越高,但都市快节奏的生活让上班族们吃饭的目标性更小,通常只是到了时间随机选择食物塞饱肚子。该美食网站倡导一种全新的健康的生活方式,用户可以根据网站上提供的食谱了解不同菜系的风格、做法及搭配,除了可以查看各种食谱学习做饭, 还可以在线与其他用户一起交流和分享做菜的心得,通过美食来感受生活之美。
1.2、技术栈
使用 React 框架来完成本次项目的实现,使用技术有如下一些:
nodejs
进行 模拟接口数据 ( 代理 )react react-dom
react-router-dom
redux react-redux redux-thunk immutable redux-immutable
styled-components ( css作用域 ) / sass / less / stylus
antd-mobile ui
组件库 ( 移动端 )react-transition-group
axios
http-proxy-middleware
配置装饰器 (
costomize-cra react-app-rewired
) 等等1.3、开发环境
开发环境为:
Windows-
开发工具:
VSCode / webstorm + jsx
插件开发调试工具:
Chrome
浏览器 react-devtools,redux-devtools
开发运行环境:
node
环境代码管理:
git
上线环境:
linux + nginx
1.4、项目效果展示
文章图片
1.5、项目初始化
- 在本机磁盘中指定位置创建一下 react 项目,命令如下
npx create-react-app cookbook
- 创建好项目后,进入项目目录先安装常规要使用的三方包,命令如下
npm i -D customize-cra react-app-rewired http-proxy-middleware
npm i -S redux react-redux redux-thunk styled-components immutable redux-immutable react-router-dom react-transition-group axios
- 清理创建好的项目中不需要的文件及文件夹
2.删除 src 目录下的部份内容
- 修改 public / index.html
- 在 src 目录下创建 根组件 App.jsx 与项目 入口文件 index.js
- 配置 装饰器 支持
文章图片
// 此文件就是对于 webpack 进行增量配置它是运行在 nodejs 中的 commonjsconst { resolve } = require('path')// 增量对于本项目中的 webpack 配置进行修改 和 添加操作类const { addDecoratorsLegacy, override } = require('customize-cra')// 自定义 webpack 配置const customize = () => config => {// 给当前项目添加一个 @ 字符串,来方便写代码时的导入路径config.resolve.alias['@'] = resolve('src')return config}// 导出module.exports = override(// 添加装饰器支持addDecoratorsLegacy(),// 添加自定义 webpack 配置customize())
文章图片
- 修改
package.json
中的脚本命令为如下
文章图片
"scripts": {"start": "set BROWSER=NONE && react-app-rewired start","build": "react-app-rewired build","test": "react-scripts test","eject": "react-scripts eject"}
- 配置 反向代理
文章图片
// create-react-app 脚本架工具提供一个专门用来进行代理配置的文件,它是给 nodejs 运行// 模块化使用 commonjs 规范// create-react-app 脚本架工具只提供了这个入口,但是代理操作没有帮你完成// 需要手动去安装第 3 方包来实现 代理// npm i -D http-proxy-middleware// 修改此文件后,一定要 => 重启服务const { createProxyMiddleware: proxy } = require('http-proxy-middleware'); // app 对象就是 express 对象module.exports = app => {app.use('/api',proxy({target:'https://api.iynn.cn/film',changeOrigin:true,}))}
项目已在本机中 初始化 完成,需要在 远程 仓库中创建 git 仓库本机把项目初始化一个 git 仓库
文章图片
提交到远程后,在本机开始用 分支 来进行,不要在 master 中进行开发,切记
二、首页开发
2.1、antd-mobile 组件库
在线文档:Ant Design Mobile | A Mobile Design Specification
antd-mobile 是 Ant Design 的移动规范的 React 实现,服务于 蚂蚁金服 及 口碑无线 业务。它支持多平台,组件丰富、能全面覆盖各类场景,UI 样式高度可配置,拓展性更强,轻松适应各类产品风格。
- 在使用前需要先对包进行安装
npm i -S antd-mobile
- 按需加载 组件代码 和 样式的 babel 插件
npm i -D babel-plugin-import
//config-overrides.js用于 修改默认配置const { override, fixBabelImports } = require('customize-cra')module.exports = override(fixBabelImports('import', {libraryName: 'antd-mobile',style: 'css',}))
- 使用
import React, { Component } from "react"; // 引入 `antd-mobile` 的 按钮组件import { Button } from "antd-mobile"; class App extends Component {render() {return (<>>); }}export default App;
- 样式重置
rem / vw
、vh
2.2、底部导航实现
参考地址:https://mobile.ant.design/components/tab-bar-cn/
底部导航 可以使用 antd-mobile 中的 tab-bar 组件完成此功能展示。
文章图片
路由规划
2.3、菜谱大全顶部导航
height: .4rem; line-height: .4rem; background: #FF6C0C; font-size: .18rem; text-align: center; color:#fff;
2.4、轮播显示
参考地址:Ant Design Mobile | A Mobile Design Specification
该功能可以使用 antd-mobile 中的 Carousel 组件
2.5、mock 数据
mock数据( faker数据 ),即使用假数据来模拟后台的数据。
为什么要做假数据?因为后端开发接口并产出接口文档没有那么快,此时就需要我们自己来模拟请求数据。模拟的数据字段、格式等,需要和后端工程师沟通。这样,我们可以先通过模拟的数据继续完成前端的工作任务,待后端工程师写好数据接口并提供了接口信息后,我们只需要修改请求地址,前后端就实现了无缝衔接。
- 安装 json-server 帮助我们快速启动一个 web 服务
npm i -g json-server===yarn add global json-server// json-server 默认的路由模式// 支持 get / post / put / delete 而且还支持文件写入它是跨域的// data.json// http 请求地址http://xxx/data{"data": {"id": 1,"name": "aaa","age": 20}}json-server data.json
- mock数据
文章图片
2.6、搜索组件
export const SearchBox = styled.div`width: 90vw; height: .46rem; display: flex; border: 1px solid #ff6c0c; margin: .15rem auto; border-radius: 5px; box-shadow: 1px 1px 5px #ccc; justify-content: center; align-items: center; img{width: .2rem; height: .2rem; }span{color:#555; margin-left: .1rem; }`
2.7、热门分类
export const HotCateBox = styled.div`background: #fff; .title{padding: .15rem; color:#949494; }`{console.log(index, this.props.history.push)}}renderItem={dataItem => ({dataItem.title})}/>
2.8、精品好菜
静态布局展示
- HTML
精品好菜
文章图片
- 青椒香干
1000浏览 2000收藏
- css
div { padding-left: .1rem; >h1 {height: .5rem; line-height: .6rem; padding-left: .15rem; color: #666; padding-left: 0; } >div {display: flex; flex-wrap: wrap; >dl {width: calc(50% - 0.1rem); background: #fff; margin-right: .1rem; margin-bottom: .1rem; dt {img {width: 100%; }}dd {display: flex; flex-direction: column; align-items: center; padding: .1rem; h3 {font-size: .16rem; }p {font-size: .12rem; color: #666; }}} }
三、分类开发
3.1、分类顶部切换
创建需要的组件 和 样式
- HTML
- 分类
- 食材
- CSS
height:.44rem; background:#ee742f; display:flex; align-items:center; justify-content:center; ul { width: 1.4rem; height: .3rem; display: flex; position: relative; border: 1px solid #fff; z-index: 0; border-radius: .15rem; li {flex: 1; line-height: .3rem; text-align: center; color: #fff; &:last-child {position: absolute; width: 50%; height: .3rem; background: #fff; z-index: -1; border-radius: .15rem; transform: translate(0, 0); transition: all 0.4s ease-in; &.right {transform: translate(100%, 0); }}&.active {color: #ee742f; } }
3.2、列表展示
- HTML
- 分类
- 内容
- CSS
.div { height: 100%; display: flex; >div:first-child {width: .9rem; >ul {height: 100%; overflow-y: scroll; li {height: .5rem; text-align: center; line-height: .5rem; background: #f3f3f3; &.active {background: #fff; span {display: inline-block; height: 100%; border-bottom: 1px solid #ee742f; }}}} } >div:last-child {flex: 1; background: #fff; padding: .2rem .1rem; >ul {display: flex; flex-wrap: wrap; overflow-y: scroll; height: 100%; align-content: flex-start; li {width: 33.3333%; text-align: center; height: .5rem; line-height: .5rem; color: #666; }} }
总结 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- 宽容谁
- 一个人的旅行,三亚
- 第6.2章(设置属性)
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 家乡的那条小河
- 讲述,美丽聪明的海欧!
- PMSJ寻平面设计师之现代(Hyundai)
- 夜游宫|夜游宫 心语
- 增长黑客的海盗法则