hooks 出现很久了,之前只是看过文档,没有进行实战,刚好在掘金看到了react-cloud-music的项目, 觉得还不错,就买了下来,学习一下, 加入了自己的理解和书写习惯,巩固和深入学习 Hooks。
React+React-Router+redux+styled-components 简单仿简书
npx create-react-app cloud-music
npm i
- api: 放置接口
- assets: 静态资源
- components: 公用组件(一般3及3个公用以上)
- config: 环境配置
- routes: 路由
- store: redux
- utils: 工具函数
- view: 页面
- reset.js: 重制样式
- setupProxy.js: 本地跨域
放弃class
改用Hooks
, 你就要忘记class
编码思想, 在用下去是要掉坑里面的。
比如求去最新值:
在class
中不存在这个问题, hooks
存在,每次获取的都是当前渲染是的值, 不是最新值, 获取最新值使用ref来获取
React.forwardRef
会创建一个 React 组件,这个组件能够将其接受的 ref 属性转发到其组件树下的另一个组件中。
useImperativeHandle(ref, createHandle, [deps])
useImperativeHandle
可以让你在使用 ref 时自定义暴露给父组件的实例值。在大多数情况下,应当避免使用 ref 这样的命令式代码。useImperativeHandle
应当与 forwardRef
一起使用
cnpm i -D cross-env
// package.json
"scripts": {
"start": "cross-env NODE_ENV=development node scripts/start.js",
"build": "cross-env NODE_ENV=production node scripts/build.js",
"test": "node scripts/test.js"
},
config
文件夹内新建default, index, development, production
文件
配置相应的内容并导出
index.js
import developConfig from './development'
import prodConfig from './production'
import defaultConfig from './default'
const configEnv =
process.env.NODE_ENV === 'development' ? developConfig : prodConfig
const config = Object.assign(defaultConfig, configEnv)
export default config
这样跨域就完成了, 后台接口使用网易云 API下载项目本地运行,记得改端口!!!
npm i redux redux-thunk redux-immutable react-redux immutable -S
这里如果不熟悉 redux 可以查看react-redux
这样 recommend 页面数据完成, 后面页面就这样使用 redux
其他页面也没什么问题,通过 recommend 页面我们学会了使用 redux,其他页面可以参照 recommend 页面来
这里最难的应该是播放器, 那个页面了, 划分好组件, 一步步来也是没问题的。
这里主要用到的事 CSSTransition
来做一些过度的效果
动画效果, 如全屏播放器的图片入场,退出的效果