1)对react的理解(特点)
1, Jsx js+xml ,是对js语法的扩张,需要通过babel.js的编译转化成浏览器可以解析的普通js对象
2, 虚拟dom 。 相当于在js和真实dom之间的缓存, state改变 调用render函数会重新生成新的虚拟dom树,通过diff算法计算出新旧dom差异 只能差异部分更新到真实的dom,减少了对真实dom的操作,提高了性能
3, 单项数据流 , 数据只能通过父组件传给子组件 对于子组件来说只能使用propos不能修改;如果需要修改 需要在父组件定义函数,通过propos传递给子组件,在子组件中调用此函数,在父组件里面修改props(双向绑定)
4, 组件化思想,将整个ui按照功能解构成各个小组件 小组件嵌套组合成大组件 大组件构成页面,组件可以重复使用。
2)react 性能优化
1,性能优化是在shouldComponentUpdata 钩子里面是实现的
2,数据更新时立即执行这个函数 判断是否需要调用render函数,如果返回false就跳过此次更新 不再执行后面的生命周期钩子;如果返回true 才会调用render方法重新绘制dom,减少dom渲染的次数从而提高了性能。
3,但是组件的shouldcomponentUpdate()默认返回true,,需要自己重写这个钩子,增加判断,如果数据有变化,用新的state替换旧的state返回true, 否则返回false
4
,pureComponent里面实现了重写shouldComponentUpdate(),
对新旧state,props进行浅层对比,如果组件内部的state为对象或数组格式,当该对象或数组内部发生改动时,不能直接获取setState,这里必须使用解构赋值,将对象或数组内部展开,再重新赋值,才会改动
3)react 中 keys 的作用是什么?
Keys 是 react 用于追踪哪些列表中元素被修改、被添加或者被移除的辅助标识。在开发过程中,我们需要保证某个元素的 key 在其同级元素中具有唯一性。
在 react Diff 算法中 react 会借助元素的 Key 值来判断该元素是新创建的还是被移动而来的元素,从而减少不必要的元素重渲染
4)react 中 refs 的作用是什么?
访问 DOM 元素或者某个组件实例从而调用组件实例的方法
5)调用setState 之后发生了什么?(必会)
调用 setState ,setstate是异步的,新的 state 并不会马上生效渲染组件。而是先看执行流中有没有在批量更新中,如果有就等待试图合并称成一次更新;
有则调用shouldcomponentUpdate()函数看其返回true的话执行
->render(进行 diff 运算,与上一次的虚拟 DOM 相比较,进行有效的渲染更新组件)
->react更新真实的dom和ref
->componentDidUpdate 获取到最新的 state 或 props
6)除了在构造函数中绑定 this,还有其它方式吗?(必会)
1 在constructor 中绑定this
2 在事件绑定时用bind绑定
3 在事件绑定时将事件放入箭头函数回调中(每次组件渲染时都会创建一个新的回调)
4在定义事件阶段使用箭头函数绑定
7)setState 第二个参数的作用?(必会)
第一个参数是要改变的 state 对象,
第二个参数是 state 导致的页面变化完成后的回调(箭头函数),等价于 componentDidUpdate
8)在构造函数中调用 super(props)的目的是什么?
调用super的原因:在ES6中,在子类的constructor中必须先调用super才能引用this super(),就可以直接继承父类的属性和方法
super(props)的目的:在constructor中可以使用this.props
标签:总结,调用,dom,理论,绑定,react,state,组件 From: https://www.cnblogs.com/fanjiawen/p/18180432