react 三板斧
1、声明式
2、组件化
3、一次学习随处编写 【衍生RN| 支持服务端 】
1、react 使构建UI轻而易举、声明式编写uI。
1.1 理解声明式编程 源自函数式编程
1、纯函数、
无副作用、【IO、键盘、Dom 】
固定的输入 固定的输出、可预见性【参见TS】。
不可变性 【不修改变量,返回一个新的值】不推荐的 splice push 、、、修改对象
饮用透明 【函数的运行不依赖于外部变量,只依赖于输入的参数。】
2、函数的组合
3、柯里化【部分求值】、
4、偏函数 【缓存一部分参数,然后让另一些参数在使用时传入。】
5、高阶函数
6、声明式和命令式
7、Monad 模式 【函数拆解成互相连接的多个步骤,串行任务】promise产生社区并被吸纳。
而真正的编程总要接触脏的世界 IO
function readLocalStorage(){
return window.localStorage;
}
组件化:
构建自身状态封装组建、然后最组建进行组合构建业务!
所有 React 组件都必须像纯函数一样保护它们的 props 不被更改!!
react 可能把多个state合并到一起执行。因此 setState 也可以是回掉的
this.setState({comment: 'Hello'});
this.setState((state, props) => ({
counter: state.counter + props.increment
}));
2、数据是向下流动的 单纯的关心数据, 不关心是 函数组建还是class 组建
这一点在v3 上面也得到的体现 不再强调函数组建。
不期望你调用函数边界,不期望父子相互干涉、如果你想被共享 可以暴漏出去你的方法。
3、 react 里面支持 dom.addEventListener(); v2 是.native v3是 not emit 枚举 皆为原生
4、 推荐使用组合而非继承 、 减少你对庞大基类的耦合。 如果你需要使用继承 你需要了解你一些你需要的或者不需要的。
5、 组合: props.children 或者 props.attr 类似 v2 v3 的卡槽
6. 为了减少副作用 V3 移除了什么 off on
6、状态提升、提取到 共同的父组建中
6 、react 哲学: 将渲染ui和添加交互分开 以清晰的单项数据流驱动业务。
7 react Fragment <></> V2 的 templete V3 自动补全
8、 无障碍
9、 react lazy
const OtherComponent = React.lazy(() => import('./OtherComponent'));
vue 3
const Header = defineAsyncComponent(() => import('@/components/Header.vue'))
vue2
'my-component': () => import('./my-async-component')