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

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 又不是不能用,为什么一定要去追逐这些新的东西呢?
  一个抽象的解释:我们应该不断投资未来。
  这不只是在开发中,在工作中,更是在任何领域 —— "在新赛道中以不断细分的形式,用第一的身份换取资源。"
  旧世界的轨道上挤满了辛苦的赶路者,虽然新大陆海市蜃楼,但只有新大陆才会跃升一切。

头条里面的摄影爱好者多不多?看头条摄影板块的热度和悟空问答里对于摄影问题的跟答量还是蛮多的。应该说在没有头条和悟空之前,我网上学习摄影知识的地方,主要是各大摄影论坛。但是自从有了头条和悟空问答,这里就成了我学为什么所有人都觉得90后堕落?那些富豪榜单上的90后!币圈占一半二零一八年胡润百富榜90后首富二零一九年十月二十八日,胡润研究院正式地发布了二零一九年胡润80后白手起家富豪榜,葛越晟以35亿元的资产排名第32,其实早在去年的时候,这位年轻的小伙BlackmagicDesign产品助力LPA行业先锋论坛节目制作LPA独立音乐盛典,国内独立音乐领域首个以Live现场为维度进行的评选盛典,填补了我国现场音乐领域的奖项空白。LPA独立音乐盛典下设颁奖礼盛典系列展演行业先锋论坛三个版块,多维度激静音解锁快人一步HUAWEIHiLink生态产品青稞智能锁A7H越来越多的年轻人,在选择家装的时候开始青睐全屋智能,而智能门锁凭借丰富的开锁方式强大的安防功能和与智能家居联动的能力,成为当下年轻人家装清单上的必选项。一款靠谱的智能锁,不仅需要功现在都用什么APP交友?我想你问这个问题肯定不想别人回答你什么QQ,微信这些。你的意思应该是除了目前主流的交友软件。而这两个已经不是交友软件那么简单了,它的用户群里非常庞大了,以至于我们都当它是一种通讯交为什么现在的人查资料,直接上头条呢?而不去百度?都能查为啥要去看百度的广告?头条比较全面,各方面的人才都很多,可以直接得到想要的答案,还有习惯是个很可怕的东西,一句话就是习惯了头条啥都有还能刷着玩,还能赚钱,百度不是占地方呀,所如果蚂蚁倒闭,存在支付宝里的钱找谁要?支付宝里面的钱比你存在商业银行里面的钱还安全,国家早就已经对支付宝里面的钱进行了规定,需要全额准备金,也就是这些钱是放在央行的,如果你知道什么是准备金,你就应该知道准备金的安全程度阿里巴巴是在封杀什么?解雇10名员工外泄性侵指控内网文章根据知情人士透露,这10名员工被阿里巴巴解雇,只是因为他们公开了女同事对一名前经理的性侵指控,10名员工是如何知道这样隐秘的事情呢?我们大家不知道,在阿里巴巴里面,有一个内网,在内OsmoAction5K还是OsmoMobile5,大疆宣布在本月八号发布新品昨天我们曾经报道大疆将发布OM5手机云台。就在今天大疆宣布在本月八号,也就是下个拜三发布新品。我们不能装作猜不到是什么。在泄密者RolandQuandt分享的一组图像中,大疆OM5太激动了!荣耀7月手机销量高达400万台,成功超越小米有一说一,荣耀还是华为子品牌的时候,很多人觉得荣耀手机之所以受欢迎,主要还是因为华为的影响,并不是荣耀手机做得好。所以荣耀和华为分家后,很多人并不看好这个品牌,与此同时,荣耀连续发教你如何用U盘启动盘装系统电脑重装系统其实是一件很简单的事,但是如果电脑没有光驱或者没有系统光盘,那么要重装系统却是非常难的。那么怎么才能比较简单的重装系统呢?这里给大家介绍一下如何用U盘启动盘装系统。首先
2019款别克君威20T精英型改装,花小钱办大事,外观内饰大提升车就像自己的老婆,总想把它打扮的漂漂亮亮,开出去有面子,自己用起来也更舒心。我是2019款别克君威20T精英型车主,提车已经两年多了,目前行驶里程接近4万公里,当时选择别克君威的原极致减重一体式车身本田发布CBR1000RRR全新专利图HONDA在2019年推出CBR1000RRR之后,原先期望这台三倍R能在WSBK赛场上展获佳绩,可惜的是CBR1000RRR未能如预期在赛场上翻盘,HONDA也在不久前传出可能推洛杉矶奥组委发布2028洛杉矶夏季奥运会与残奥会会徽第34届夏季奥林匹克运动会,又称2028年洛杉矶奥运会,这是继1932年洛杉矶奥运会和1984年洛杉矶奥运会后,洛杉矶将第三次举办夏季奥运会。早些时候,洛杉矶2028奥运会组委会发纹身护理产品StoriesampampampInk视觉形象升级StoriesInk是一款屡获殊荣的纹身后护理产品,采用专业成分配制而成,可防止纹身褪色,并改善纹身皮肤的外观和手感。该品牌创办于2017年,由英国利兹RobotFood设计公司孵两性健康用品Champ视觉形象设计Champ于2020年推出,是一个专为男性提供优质标签清晰的两性健康用品品牌。该品牌目前提供两种避孕套和两种润滑液,除了提供优质产品外,其主要目标是消除消费者在零售场所购买避孕套的英特尔公司Intel视觉形象升级英特尔(Intel)是美国一家以研制CPU为主的公司,同时也是全球最大的个人计算机零件和CPU制造商,它成立于1968年,总部位于美国加州,工程技术部和销售部以及6个芯片制造工厂位益生菌苏打水HUZZAH视觉形象设计近日,摩森康胜公司在美国推出了其首批非酒精类饮品,HUZZAH低热量益生菌苏打水,是一种带有帮助维持肠道健康益生菌的调味苏打水。该产品下设三种口味,草莓芙蓉多汁梨和树莓柠檬。今年早小型酿酒厂EastLondonLiquorCompany视觉形象升级EastLondonLiquorCompany成立于2014年,是一家位于英国伦敦哈克尼内区的小型酿酒厂,生产杜松子酒伏特加酒朗姆酒和威士忌酒。早些时候,该酿酒厂推出了六种罐装产品小型连锁休闲餐厅FieldsGoodChicken视觉形象升级FieldsGoodChicken成立于2014年,是一家小型连锁休闲餐厅,专注于烤鸡和健康舒适的食品类配菜。由FieldFailing创办,他曾经是一名职业自行车运动员,也是一名运动鞋商店Footshop视觉形象升级Footshop成立于2011年,是欧洲最受欢迎的运动鞋商店之一,也是捷克和斯洛伐克市场的领导者,总部设在布拉格。专注于各大品牌的时尚运动鞋,在某些情况下甚至获得了独家发行权。本月澳大利亚活动影像中心ACMI视觉形象升级澳大利亚活动影像中心(ACMI)拥有一张精彩无比的年度日程表,墨尔本最出色最受欢迎的电影节都会在这里举办,同时它也是在澳大利亚本土和国际上都享有盛名的电影院。2019年5月,ACM