范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

2022年,我们再来谈谈React状态管理

  1. 什么是 "状态"?
  jQuery 时代,JS 代码中混杂 DOM 结构,各个流程庞杂交织时,就形成面条式代码,当使用发布订阅模型时,调试会一团乱麻。
  jQuery 是针对 "过程" 的命令式编程,而那么多命令,最终都是为了更新 UI 中的 "数据",为什么不直接去改数据呢?
  北京   上海,把 city="北京" 变为 city="上海" 就行。不管飞机火车步行抛锚,也不管路上会不会遇到王宝强,
  现代前端框架的意义,就是问题解决思路的革新,把对 "过程" 的各种命令,变为了对 "状态" 的描述。
  什么是状态?状态就是 UI 中的动态数据。2. React 中的状态
  2013 年 5 月 React 诞生。但 2015 年之前,大概都是 jQuery 的天下。2015 年 3 月 React 0.13.0 发布,带来了 class 组件写法。
  在 React class 组件时代,状态就是 this.state,使用 this.setState 更新。
  为避免一团乱麻,React 引入了 "组件" 和 "单向数据流" 的理念。有了状态与组件,自然就有了状态在组件间的传递,一般称为 "通信"。
  父子通信较简单,而深层级、远距离组件的通信,则依赖于 "状态提升" + props 层层传递。
  于是,React 引入了 Context,一个用于解决组件 "跨级" 通信的官方方案。
  但 Context 其实相当于 "状态提升",并没有额外的性能优化,且写起来比较啰嗦。
  为优化性能,一般会添加多个 Context,写起来就更啰嗦。在项目没那么复杂时,还不如层层传递简单。3. 什么是 "状态管理"?
  实用主义来说,"状态管理" 就是为了解决组件间的 "跨级" 通信。
  当然,在使用状态管理库时,其会带来一些衍生的思维模式,比如如何组织 state,如何拆分公共逻辑、业务逻辑、组件逻辑等,但归根结底,这些都不是核心缘由。
  核心就是为了解决实际问题 —— 为了通信。其它的各种概念与哲学,都不是必要的。
  Context 没那么好用,React 官方也没什么最佳实践,于是一个个社区库就诞生了。4. class 时代的状态管理
  React class 组件时代,就是 Redux(及其相关衍生库)与 MobX 的故事。
  Redux 是符合 React 理念的实现。而 MobX 这种 "监听" 的模式,特点是 "不够 React",但用起来简单。
  Redux 的利弊已讨论太多,简单来说,开发者关心的是 "使用",而 Redux 关心的是 "哲学"。
  之前开玩笑说,其实 Redux 用一行代码就可以表示,却写出了论文规格昏昏欲睡的文档:createStore = (reducer, state) => ({ dispatch: (action) => (state = reducer(state, action)) });
  而几乎所有 React 状态管理器的原理,其实都很简单,一个 "观察者模式" 的实现:
  在各个组件中订阅 listener,state 更新时,再把 listener 都调用一遍,从而触发组件更新。5. 为什么是 Hooks?
  React class 组件存在以下问题:this.state 是一个对象,每次更新局部,更新时也可新加 state 进去,这就让 state 整体比较混沌。使用高阶组件等模式时,会造成 this.props 中的数据来源不透明,同样混沌。因为 this 魔法指针的存在,很容易挂一大堆东西上去,互相随意调用,就会让逻辑缠绕。
  为了解决以上问题,React 引入了 Hooks:将混沌的 state 打散为一个个元数据。提供逻辑共享,以替代高阶组件。组件中不再存在 this。
  这是一种开发理念与组织理念的革新,Hooks 带有强烈的 3 个特点:primitive、decentralization、algebraic effects。primitive。元数据化,从最底层构建,让数据结构更清晰。同时也是一种工程趋势,比如 Tailwind CSS 便是将 CSS 元数据化。decentralization。去中心化,class 时代普遍是一种 "顶层下发" 的理念,但 Hooks 带来强烈的 "组件自治" 的理念(比如 Provider 不再必须,组件请求自行处理)。同时,在其他领域,去中心化也是一个大的流行概念。algebraic effects。代数效应,归根结底,Hooks 可以理解为一根管道,直通 React 核心能力,将内部机器暴露给了开发者。6. Hooks 时代的状态管理
  Hooks 出现之后,社区还没有一个像 Redux 一样曾经一统江湖的状态管理器。
  Redux 添加了一些 useSelector、useDispatch、useStore 之类的能力,而 Facebook 自己也开源了 Recoil 这样的库。
  但 Redux 终究老气沉沉,且早期给人留下的阴影太大,很多人的思维被格式化,随便一写就是云里雾里,只为实现一个简单功能,
  而 Recoil 的写法则看起来有些别扭、有些啰嗦,发展也不温不火。// Recoil atom({ key: "textState", default: "" }); useRecoilState(textState);
  而在 Hooks 时代,一个神秘组织异军突起,一口气贡献了 3 个状态管理库。
  它就是 pmndrs,pmndrs for Poimandres。pmnd.rs
  说是 "组织",其实主要开发者应该是一个人,就是这位大师,Daishi Kato。github.com/dai-shi
  这三个库分别是 zustand、jotai、valtio。有趣的是,这三个词其实都是 "状态" 的意思。
  zustand 德语 "状态",jotai 日语 "状态"、valtio 芬兰语 "状态"。
  简单看一下用法:// zustand  - Redux 理念,旧时代精神,中心化逻辑  const useStore = create((set) => ({   bears: 0,   removeBears: () => set({ bears: 0 }), })); const bears = useStore((state) => state.bears);// jotai  - primitive 理念,用法略啰嗦,但符合 Hooks 精神  const countAtom = atom(0); const [count, setCount] = useAtom(countAtom);// valtio  - proxy 理念,"不太 React",但用起来简单  const state = proxy({ count: 0, text: "hello" }); const snap = useSnapshot(state);7. 贪婪更新 vs 惰性更新?
  如之前提及 MobX 时所说,使用 proxy "监听" 的方案,虽然不够 React,但确实用起来简单,且最符合直觉。
  本质上来说,React 是一种 "贪婪更新" 的策略,全量 re-render 然后 diff。
  而 proxy 是一种 "惰性更新" 的策略,可以精准知道是哪个变量更新。所以利用 proxy,可以做一些 re-render 的性能优化。
  而 React conf 上介绍的 React Forget,代表 React 自身也并不排斥在 "惰性更新" 的思路上做一些优化。
  注意上面的 "贪婪更新" 和 "惰性更新" 是我自创的词,参考了正则中的贪婪和惰性概念。8. React 状态管理思路的变迁所有 state 在一个大对象里   分割为元数据数据不透明   数据透明顶层请求,下发数据   组件自身处理请求状态提升   组件自治Provider & Container components   just Hooks混沌集合   透明解耦贪婪更新   惰性更新大而全、强概念、DX     更清晰、更简单、DX  少一些概念,多一些直觉少一些规则,多一些自动化
  总的来说,这虽是状态管理思路的变迁,但更是 React 社区开发思路的变迁,一种对最佳实践的不断探索:中心化   去中心化数据集合   元数据Build a structure, completely from the ground up9. 隆重介绍 resso,可能是最简单的 React 状态管理器
  我一直在思索怎样的一个 React 状态管理器用起来最简单,不断去探索一个自己用起来最舒服的工具。
  之前曾经开发过 Retalk(Redux 最佳实践)、flooks(Hooks 状态管理),但随着新思路的出现,现在将最新的一些灵感集中在了 resso 这个状态管理库里。
  下面是 resso 的使用方式:import resso from "resso";  const store = resso({ count: 0, text: "hello" });  function App() {   const { count } = store;   return (     <>       {count}               ); }
  注意它与很简单的 valtio 相比,写法也更简单一些,应该没法更简单了,如果有,请告诉我。
  更重要的是,resso 会自动优化 re-render,绝不因为数据在同一个对象里,就触发额外的 re-render。
  其实状态管理本是个很简单的东西,但 Redux 等工具追加了太多的复杂上去。人们用一个工具的原始目的,就是解决问题,如何而已。
  所以,简单,清晰,让工具回归工具。我们了解一个锤子的方式,就是拿起来用。
  希望 resso 会让有此需要的人喜欢。10. Invest the future
  但是这一切,又有什么用呢?
  在新东西不断涌来时,人们不免会发出疑问:class 组件又不是不能用,Redux 又不是不能用,或者更彻底一些,jQuery 又不是不能用,为什么一定要去追逐这些新的东西呢?
  一个抽象的解释:我们应该不断投资未来。
  这不只是在开发中,在工作中,更是在任何领域 —— "在新赛道中以不断细分的形式,用第一的身份换取资源。"
  旧世界的轨道上挤满了辛苦的赶路者,虽然新大陆海市蜃楼,但只有新大陆才会跃升一切。

特斯拉员工猝死在生产线上,官方机构介入调查鞭牛士1月21日消息,据IT之家援引外媒消息,美国当地时间周三早上,特斯拉一名员工猝死在加州弗里蒙特工厂的动力总成系统生产线上,相关机构已经介入调查。加州职业安全与健康管理局发言人荣耀新年2022新年礼盒亮相含春联保温杯等IT之家1月23日消息,今日荣耀终端有限公司CEO赵明发了一条微博,表达了对新春的祝福,感谢一路相伴的新老朋友。赵明同时公布了2022年荣耀新年礼盒,为大家送上新春祝福。这款礼盒采荣耀magic3和小米13,该选哪个?小米13好像还没出捂脸,选荣耀吧,Magic影像,卓尔不凡,相机配置方面,荣耀Magic3Pro搭载了一颗5000万像素主摄(11。56英寸大底)一颗6400万像素黑白镜头一颗64有赞被曝大裁员,公司回应称不属实,正开启事业部化调整新京报讯(记者秦胜南)近日有消息称有赞将裁员超1500人。对此,1月23日,有赞方面回应新京报记者称消息不实,正开启事业部化调整。有消息称有赞启动第一轮裁员,涉及超1500人,首先基于区块链的数字藏品研究报告正式发布恒生电子参与联合编写本报讯近日,由可信区块链推进计划主持编写的基于区块链的数字藏品研究报告(以下简称研究报告)正式发布。作为编写单位之一,恒生电子与中国信通院蚂蚁区块链腾讯云京东科技趣链科技等机构共同家庭空调首选,为宝宝房间安装云米SpaceX全域风空调不当家不知道柴米贵,年初的时候搬到了新房子里面,到了夏天的时候就面临着安装空调的问题。今年夏天的空调价格格外坚挺,从6月份到10月份,即使各种活动也没有很好的价格。而有的地方,空调标准化为智慧城市建设铺平赛道近年来城市数字化转型步伐加快,其中标准化工作不仅是智慧城市建设中不可或缺的软性基础设施,更是实现其高效性集约性协同性的重要抓手。专家表示,标准化在智慧城市建设中作用明显,但当前还要柳善人与恶意返乡柳善人的话题在互联网沸沸扬扬了几近半年时间,而主流媒体却隔岸观火,无动于衷,充当吃瓜群众不动声色。恶意返乡的话题一出,却闻风而起,一哄而上,兴师动众。为什么?难道国有资产流失问题无喜报!中国一拖自动驾驶拖拉机获得大赛金奖近日,由中国机械工业联合会组织开展的2021全国机械工业产品质量创新大赛(以下简称大赛)颁奖。中国一拖自动驾驶拖拉机开发及推广应用获大赛金奖,是拖拉机行业唯一的一个金奖。荣获金奖项为什么很多老年人不用微信支付?是因为他们舍不得花钱买流量吗?问题问的很好,但你的设问暴露了你的年少无知,心胸狭窄,为人刻薄的嘴脸。前一个问题为什么很多老年人不用微信支付,你的问题完全可以到这里,等待大家的回答。那么,老年人不用微信支付的原因酷!5G智慧观赛首次亮相十四运会全沉浸体验!赛场精彩,随处掌握!指尖一动,我的视频我做主!9月2日上午9时,中国移动陕西公司智慧观赛技术在正式比赛中首次亮相,这也是5G技术首次成规模应用于国家顶级体育盛事。作为十
河北新乐第一富豪手握两家上市公司,身家210亿河北新乐首富出现手握两家上市公司,身家210亿推荐语新乐市,是河北省石家庄市代管的县级市,是石家庄市县级文化经济强市。除此之外,新乐文化底蕴深厚,是中华民族的发祥地之一,相传人类始成都家电大王将濒临倒闭的小厂,打造成上市公司,如今身家3亿成都家电大王将濒临倒闭的小厂,打造成上市公司,如今身家3亿推荐语成都是一个风景秀丽的风水宝地,自古以来更是有天府之国的美誉,经过多年的发展,如今成都已经成为游客们争先前往的网红打卡首销这么火爆HUAWEInova2系列是怎么做到的?面向年轻群体的HUAWEInova系列,自诞生之初便肩负着华为开拓中端市场的重任,去年第一代nova试水市场便大获全胜,今年刚刚发布的HUAWEInova2系列自然也承载了华为更多双瞳如小窗佳境观历历魅族PRO7系列2880元起PConline资讯双瞳如小窗佳境观历历魅族PRO7系列2880元起7月26日,在广东珠海大剧院,伴随着一场宏大的交响乐演奏之后,魅族科技(MEIZU)正式发布魅族PRO7系列手机江苏如皋第一富豪身价96亿,成功后积极投身慈善事业江苏如皋第一富豪身价96亿,成功后积极投身慈善事业推荐语如皋,江苏省辖县级市,由南通市代管,是江苏省历史文化名城。值得一提的是,如皋市风光秀丽,景色宜人,是一块难得的风水宝地,此前浙江又一富豪出现,打造国内时尚零售企业,身价96亿浙江又一富豪出现,打造国内时尚零售企业,身价96亿推荐语作为衣食住行中重要的一环,服装行业一直以来都是一个竞争激烈的大行业。数据显示,过去几年,由于经济增速放缓以及中国股票和消费者山西低调的富豪从煤矿工人逆袭为煤老板,身价48亿山西低调的煤老板从煤矿工人逆袭为企业老总,如今身价48亿推荐语山西,位于中国华北,东与河北为邻,西与陕西相望,南与河南接壤,北与内蒙古毗连,地势呈东北斜向西南的平行四边形,是典型的广东隐形地产大亨,继承父亲的大量地皮,百亿身价被大大低估广东隐形地产大亨,继承父亲大量地皮,百亿身价被大大低估推荐语广东作为我国经济最发达的地区之一,其自改革开放以来经济表现就十分不错。最新资料显示,2021年上半年广东地区生产总值为5人气最高的好物竟是TA?欧拉好物研究所公布投票结果不知不觉,热度十足的欧洲杯即将进入淘汰赛阶段,而令女生们欣喜的欧拉好物研究所则正式公布了喜爱度top5的好物作品。在经历了全网征集层层筛选以及投票终选过后,最令喵粉们喜爱的,究竟是河北平山第一富豪打造国内钢铁龙头企业,如今身价百亿河北平山第一富豪打造国内钢铁龙头企业,如今身价百亿推荐语平山县,隶属河北省石家庄市。地处河北省西部太行山东麓滹沱河上游。平山县是全国绿色食品原料(核桃)标准化生产基地,是中国核桃之河北石家庄第一富豪放弃铁饭碗创业,如今身价210亿河北石家庄第一富豪放弃铁饭碗创业,如今身价210亿推荐语石家庄,旧称石门,是河北省省会,国务院批复确定的中国京津冀地区重要的中心城市之一。石家庄地理位置优越,京广石太石德朔黄四条铁