不懂就蒙系列,用黑帽的概念解释一下useState的用处。

const [state, setState]=useState(myState)

useState, 在react世界中,它是一个函数,需要传递一个值,然后会返回一个数组,数组第一项代表值state(与myState值相同),第二个是设置值的方法,有点Proxy的感觉。

如果我们这时候把state加入到页面中,会发现随着setState(newState)的调用,页面中的state也会发生变化,于是我们看一下这盲盒周围发生了什么,首页执行了setState这个方法,然后在黑盒内部把state变成了newState,然后页面就重新渲染了这个值,根据咱们对react的了解,react是根据虚拟dom来更新真实dom的,那就意味着setState函数进行了一次虚拟dom的对比,然后把变化加载到页面中。但是我们调用setState可以在任意位置呀,它怎么观察到每个地方的变化呢,是不是想到了观察者模式,但是代码怎么监听到此变化,而且还调用了一次dom更新。想了一下,咱们这个组件是不是export 给别的地方用,那就意味着对于别的地方来说,咱们这个组件也是一个盲盒,一个有完整交互的盲盒,这就意味着咱们虚拟dom的对比是在这个组件内部进行的,但是改的地方有可能不只一个地方对吧,这样,是否可以写一个统一的函数,但凡你更新的时候,都得调用我这个方法,这样的话,无论你在哪个位置 调用,我都可以接收到你的变化,这有点像Proxy。这个方法到底干了什么呢,其实就是做了一次虚拟dom的比对,然后渲染到真实dom节点上。

所以我们可以这样理解,当我们调用setState的时候,它第一会修改值,第二会把最新的变化告诉当前组件,然后组件去调用虚拟dom比对的方法,如果视图有变化,那么就以一个相对小的代价去渲染真实dom。

主要讲述了一个黑盒猜解的思路,毕竟,不是所有的时候我们都有精力或权限去看别人的代码的,但是这时候咱们可以根据输入、输出来判断一下函数具体的作用是什么。