当前位置: 首页 > news >正文

学生成绩管理系统 网站建设wordpress 全局设定

学生成绩管理系统 网站建设,wordpress 全局设定,wordpress右下角广告代码,网站建设制作 企业站开发哪家好为什么不要在循环#xff0c;条件或嵌套函数中调用hooks 前言useState Hook 的工作原理具体实现1、初始化2、第一次渲染3、后续渲染4、事件处理简单代码实现 为什么顺序很重要Bad Component 第一次渲染Bad Component 第二次渲染 总结 前言 自从 React 推出 hooks 的 API 后条件或嵌套函数中调用hooks 前言useState Hook 的工作原理具体实现1、初始化2、第一次渲染3、后续渲染4、事件处理简单代码实现 为什么顺序很重要Bad Component 第一次渲染Bad Component 第二次渲染 总结 前言 自从 React 推出 hooks 的 API 后相信大家对新 API 都很喜欢但是它对你如何使用它会有一些奇怪的限制。比如React 官网介绍了 Hooks 的这样一个限制 不要在循环条件或嵌套函数中调用 Hook 确保总是在你的 React 函数的最顶层以及任何 return 之前调用他们。遵守这条规则你就能确保 Hook 在每一次渲染中都按照同样的顺序被调用。这让 React 能够在多次的 useState 和 useEffect 调用之间保持 hook 状态的正确。 useState Hook 的工作原理 这个限制并不是 React 团队凭空造出来的的确是由于 React Hooks 的实现设计而不得已为之。 为了让大家有一个更清晰的思维模型我将用数组来模拟useState的简单实现。 首先让我们通过一个例子来看看 hook 是如何工作的。 我们首先从一个组件开始 function RenderFunctionComponent() {const [firstName, setFirstName] useState(Rudi);const [lastName, setLastName] useState(Yardley);return (Button onClick{() setFirstName(Fred)}Fred/Button); }useState hook 背后的思想是你可以使用 hook 函数返回的数组的第二个数组项作为 setter 函数并且该 setter 将控制由 hook 管理的状态。 具体实现 1、初始化 创建两个空数组setters 和 state 将 cursor 设置为 0 2、第一次渲染 首次运行组件函数。 每次useState()调用在第一次运行时都会将一个 setter 函数推送到 setters 数组上然后将一些状态推送到 state 数组上。 3、后续渲染 每次后续渲染都会重置 cursor并且仅从每个数组中读取这些值。 4、事件处理 每个 setter 都有对其 cursor 的引用因此通过触发对 setter 的调用setter 它将更改状态数组中该位置的状态值。 简单代码实现 下面通过一段简单的代码示例来演示该实现。 注意这并不是 React 的底层实现但对于我们理解 react hook 的心智模型非常有帮助。 const state []; const setters []; let cursor 0;function createSetter(cursor) {return function setterWithCursor(newVal) {state[cursor] newVal;}; }export function useState(initVal) {if (state[cursor] undefined setters[cursor] undefined) {state.push(initVal);setters.push(createSetter(cursor));}const setter setters[cursor];const value state[cursor];cursor;return [value, setter]; }function RenderFunctionComponent() {const [firstName, setFirstName] useState(Rudi); // cursor: 0const [lastName, setLastName] useState(Yardley); // cursor: 1return (divbutton onClick{() setFirstName(Richard)}Richard/buttonbutton onClick{() setLastName(Fred)}Fred/button/div); }function MyComponent() {cursor 0; // resetting the cursorreturn RenderFunctionComponent /; // render }console.log(state); // Pre-render: [] MyComponent(); console.log(state); // First-render: [Rudi, Yardley] MyComponent(); console.log(state); // Subsequent-render: [Rudi, Yardley]// click the Richard buttonconsole.log(state); // After-click: [Richard, Yardley] 为什么顺序很重要 现在如果我们根据某些外部因素甚至组件状态更改渲染周期的钩子顺序会发生什么 让我们做 React 团队说你不应该做的事情 let firstRender true;function RenderFunctionComponent() {let initName;if(firstRender){[initName] useState(Rudi);firstRender false;}const [firstName, setFirstName] useState(initName);const [lastName, setLastName] useState(Yardley);return (Button onClick{() setFirstName(Fred)}Fred/Button); }  这里我们有useState的一个条件调用。让我们看看这对系统造成的破坏。 Bad Component 第一次渲染 我们的实例变量firstName和lastName包含正确的数据但让我们看看第二次渲染会发生什么 Bad Component 第二次渲染 现在firstName和lastName发生了错位我们的状态存储变得不一致了。这就是为什么保持正确顺序的重要性。 总结 通过对 useState 的简单实现来理解 react hooks 的幕后实现逻辑。考虑将状态作为一组数组存在的模型那么我们不该违反其对应的使用规则。
http://www.dnsts.com.cn/news/113682.html

相关文章:

  • 京东购物中心网络优化大师下载
  • 广昌网站建设制作六年级做网站的软件
  • 重庆万州网站建设报价网站流量突然增加
  • 做外贸要有英文网站吗北京网站建设乐云seo
  • 台州模板建站代理内江网站制作
  • 公司网站建站模板模板商业网站建设预估收益
  • 网站首页的概念正规代做毕业设计的网站
  • 小企业如何建网站网站空间200m
  • 网站建设关闭窗口代码网站的按钮怎么做 视频
  • 北京网站建设 shwl网站设计创新点怎么写
  • 四川建设部网站官网石狮建设银行网站
  • 邯郸网站建设市场网站不允许上传文件
  • 昆明做网站优化凡客另一购物网站
  • 网站建设属于税收wordpress文件调用
  • 网站建设英文方案企业营销型网站团队
  • 荧光字体制作网站房地产开发资质需要什么条件
  • wordpress小工具制作浙江seo技术培训
  • js网站统计代码西安最有名的策划公司
  • 巴中移动网站建设wordpress汉化插件软件
  • 印刷下单网站开发贺州网站制作
  • 松江网站开发培训课程赣州seo唐三
  • 建设网站公司管备案么大连商城网站制作公司
  • 网站建设维护招聘智能网站开发工具
  • 人寿保险网站企业网站留言板
  • 网站服务器租用哪家好个人能建设网站吗
  • 广东企业网站模板定制网站设计风格介绍
  • php企业门户网站上海app系统开发
  • 深圳好蜘蛛网站建设公司wordpress 主机安装教程
  • 微妙音门户网站建设微商城平台排名
  • 安庆市住房和建设厅网站wordpress使用什么数据库