import {createStore, applyMiddleware, compose} from 'redux';
import thunkMiddleware from 'redux-thunk';
const win = window;
const storeEnhancers = compose( //redux提供的compose函数,可以把多个store Enhancer c串联成为一个函数,因为createStore 只能够接受一个Store Enhancer 的参数;
applyMiddleware(...middleware), // **一定要作为第一个**
(win && win.devToolsExrension) ? win.devToolsExension : f=> f;
)
// createStore 接受三个参数,第一个参数是reducer,第二个如果是对象,被认为是创建Store的初始化状态,第三个参数是增强器
const store = createStore(reducer, storeEnhancers);
第1章 React新的前端思维方式
npm install --global create-react-appcreate-react-app frist_react_app第2章 设计高质量的React组件
一个组件只做一件事情
prop
state
this.setState,原因如下:组件不应该改变prop的值,而state的存在的目的就是让组件来改变的;
组件的生命周期
分为【装载过程】、【更新过程】、【卸载过程】
装载过程
出现原因多是:
- 初始化state
- 绑定this
- 是一个纯函数,不能改变state和props的状态
- render函数不做实际的渲染动作,只是返回一个JSX的描述结果,最终的React来渲染;
第3章 从Flux到Redux
Redux
redux的三个基本原则: 唯一数据源;保持状态只读;数据改变只能通过纯函数完成;
唯一数据源:
只有一个Store,如何设计Store上的状态结构是要考虑的重点,原则是避免冗余的数据;
保持状态只读:
修改状态,只能够通过action修改,但是这个改变不是去修改状态上的值,而是创建一个新的状态对象返回给Redux。
数据改变只能通过纯函数
reducer(state, action)
例如:
说明,Redux的reducer只负责计算状态,不负责存储状态;
聪明组件和傻瓜组件
Context ??? (后期有时间了解一下)
Context 这个功能提供了一个全局可以访问的对象,一般避免使用
React-Redux
做了两个事情: 提供一个connect;提供一个Provider
相当于聪明组件,用mapStateToProps 把聪明组件的状态传给傻瓜组件,通过mapDispatchToProps把用傻瓜组件的用户行为转化为派发给Store的动作。
第4章 模块化React和Redux应用
第5章 React组件性能优化
可以提高性能,要满足两点:
工作原理:只要相关的状态没有改变,那就使用上一次缓存的结果;
要扁平化,范式化,所谓范式化,就是按照关系型数据库的设计原则,减少冗余数据;
第6章 React高级组件
第7章 Redux和服务器通信
fetch: 用fetch来访问服务器数据资源,fetch函数返回的结果是Promise对象,虽然被fetch广为接受,大有取代其他网络访问方式的架势,但是它有一个特性一直被人诟病,那就是fetch认为只要服务器返回一个合法的HTTP响应就算成功,就会调用then提供的回调函数,即使这个HTTP响应的状态码是表示出错了的400或者500。正因为fetch的这个特点,所以我们在then中,要做的第一件事就是检查传入参数response的status字段,只有status是代表成功的200的时候才继续,否则以错误处理。
访问服务器数据的时机和步骤
但是,React组件的渲染又是同步的,当开始渲染过程之后,不可能让Weather组件一边渲染一边等待服务器的返回结果。
总之,当Weather组件进入装载过程的时候,即使此时Weather立刻通过fetch函数发起对服务器的请求,也没法等待服务器的返回数据来进行渲染。因为React组件的装载过程和更新过程中生命周期函数是同步执行的,没有任何机会等待一个异步操作。
所以,可行的方法只能是这样,分两个步骤完成:
步骤1,在装载过程中,因为Weather组件并没有获得服务器结果,就不显示结果。或者显示一个“正在装载”之类的提示信息,但Weather组件这时候要发出对服务器的请求。
步骤2,当对服务器的请求终于获得结果的时候,要引发Weather组件的一次更新过程,让Weather重新绘制自己的内容,这时候就可以根据API返回结果绘制天气信息了。
Redux 访问服务器
第8章 单元测试
第9章 扩展Redux
中间件用来增强Redux Store的dispatch方法。
中间件模板:每个中间件都是一个函数,返回一个接收next参数的函数,而接收next参数的函数又返回一个接收actions参数的函数。next参数本身也是一个函数,中间件调用这个next函数通知Redux自己的处理工作已经结束。例如以下的代码:
上面的代码就等同于:
中间件的使用:
以同时使用 redux-thunk 和 redux-devtools 增强功能为例:
中间件的开发?????????
第10章 动画
第11章 多页面应用
对javascript进行分片打包,然后按需加载;
第12章 同构
以上画 ?号的都要再读一遍!!!!