react和redux随笔

Virtual DOM更新时与上一个Virtual DOM比较。过程叫调和

This.forceUpdate 强制重新绘制。
父组件重新绘制时都会调用子组件的
componentWillReceiveProps

reducer中不能直接修改state再返回,因为纯函数不能有副作用。

This.props.children

context提供一个全局访问对象

React-redux 
connect:连接容器组件和傻瓜组件
Provider:包含store的context

Connect:把store的state转换为内层傻瓜组件的prop
把傻瓜组件中的动作转化为派送给store的动作



存储重复。
父组件要和子组件数据保持一致。
prop多级传递问题。

Redux 原则“单向数据流”:
1、唯一数据源 。
2、保持状态只读。
3、谁改变只通过纯函数完成。

文件组织结构:
1、角色组织 比如mvc 按model、view、controller 来建立文件目录。 不利于拓展。每次添加新功能都要在多个目录下跳转,查找、修改。
2、功能组织 如登陆功能、查找功能 来创建文件目录。每个功能对应一个模块,只要关注一个模块就行。
模块接口能把一个目录看作一个模块,所以推介功能组织。

状态树设计:
1、一个模块控制一个状态节点。(一个reducer负责修改一个模块的数据)
2、避免冗余数据。  Reselector (可以使用过滤器过滤掉冗余数据) 
3、树形结构扁平。树形节点太多的话都要先判断上个节点有没有。(-0----------------)

Ref直接操作DOM容易失控。

性能优化:
对实力数量是动态的组件,一点点的浪费时间会因为实例的增多而成很长时间。
react-redux的shouldComponentUpdate 会自动对数据进行浅层比较比对然后判断是否要渲染。

选择什么样的方式定义组件的接口,如何,如何定义state 到prop的转变,使用说明样的算法来对比Virtual DOM,这些决定对性能和架构的影响时巨大的。

跟节点不同会重新渲染。

Key的用法
Key可以知道新加入的节点,只渲染新的节点。然后调用原来的props来启动更新过程。可以避免无谓的更新。
Key的取值不能直接把数组中的下标直接拿来用。因为数组是会变的。也容易与其它数组重复。

提高数据获取性能(用过滤器过滤不要的数据)

范式化状态树。

高阶组件:
高阶组件就是一个接受一个组件输入的函数。然后返回以新的组件作为结果,而且返回的新组件具有输入组件所不具有的功能。
以函数为子组件

import React from ‘react’;

function removeUserProp(WrappedComponent ) {
    return class WrappedComponent  extends React.Component{
        render(){
            const {user , …otherProps}=this.props;
            return <WrappedComponent {…otherProps} />
        }
    }
}

export default removeUserProp;

高阶组件是为了重用代码。

中间件是为了解决redux的异步问题。因为redux是同步的。

Fetch 不存在中断概念
多次请求事件(1、只使用获取的最新的数据,2、判断在发送请求)

异步操作的action :进行中、操作完成、操作失败。


动画的实现:
css3
ReactCSSTransitionroup.   用npm安装 react-addons-css-transiton-group
React-Motion

嵌套路由
分片打包:
不直接import 
用到时再用require插入

中间件:
Dispatch 派发新的action对象
调用getState获取当前的Redux Store上的对象
调用next告诉Redux当前中间件工作完毕,让Redux调用下个中间件
访问action对象action上的所有数据。

猜你喜欢

转载自blog.csdn.net/weixin_41441644/article/details/80745429