04|State:如何让页面“动”起来?
蒋宏伟
你好,我是蒋宏伟。
那么这一讲,我们来讲搭建页面的第二步,让页面“动”起来,这里的“动”说的是在不同场景下,让页面展示出不同的内容。
怎么让页面“动”起来呢?这就要用到状态 State 了。
一个页面也好,一个应用也好,只有把状态设计清楚了,程序才能写得好。讲到状态,有些人可能会说,状态不就是页面中那些会“动”的数据吗?这很简单,还有什么好讲的。
这没错,状态确实是页面中会“动”的数据,但是要把状态用好不容易,有时候容易把状态设计复杂了,不仅代码要写得更多,还容易导致程序维护起来更麻烦。
这次,我会以搭建一个会“动”的简易购物车页面为例,和你分享下我在这方面的经验。简易购物车页面是这样的:
它比上一讲的商品表单页多了一些交互,它的所有数据都是从网络请求过来的,这些数据包括商品名称、商品价格、商品数量,数据从网络请求回来后会展示在页面上。你可以点击页面中的加号或减号,来添加数量或减少商品数量,底部的结算总价会随着商品数量的变化而变化。
要实现这个简易购物车的静态很简单,它只包括两个组件,商品表单组件 ProductTable 和商品组件 ProductRow。完成静态页面的搭建后,接下来就要让页面“动”起来了,我把这个过程分成了 4 步来实现,状态初选、状态确定、状态声明、状态更新。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
在React中使用状态(State)来实现页面动态效果是一项重要技能。本文以搭建一个简易购物车页面为例,详细介绍了状态的初选、确定和声明过程。在状态初选阶段,作者指出了程序事件和用户操作可能导致页面变化,从而找出了会变化的数据作为初选状态。在状态确定阶段,作者强调了一个状态对应一件事情、重复状态不是状态以及可计算出来的状态不是状态的原则,并确定了网络请求状态和商品列表状态。在状态声明阶段,作者介绍了使用useState钩子函数来管理函数组件的状态,并强调了在React中使用钩子函数的注意事项。此外,文章还详细讨论了如何更新对象和数组类型的状态,以及在状态管理过程中需要注意的细节。通过本文的总结,读者可以快速了解如何在React中使用状态来实现页面的动态效果,以及在状态管理过程中需要注意的细节。文章内容深入浅出,适合初学者快速上手。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《React Native 新架构实战课》,新⼈⾸单¥59
《React Native 新架构实战课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(19)
- 最新
- 精选
- beetcb感谢老师推荐!我自己也去学习了 beta 文档,状态管理那章写得真好,除了有本文中提到的方法,还把 useState useReducer Context 都串起来啦,非常清晰。
作者回复: 给学习点赞👍
2022-04-30 - Le vent se lève终于运行起来了
作者回复: 👏
2022-04-24 - Le vent se lève老师我想问下productTable。tsx文件里边的fetch请求第二个then中products: Products,这个Products是什么意思呢?可以帮我分析下吗没太看懂?
作者回复: .tsx 文件是 Typescript 文件,Products 是 products 的类型声明
2022-04-24 - 请务必优秀interface声明方式在jsx文件怎么生效呢
作者回复: 编译时就生效。入门 Typescript 参考: <入门-中文>1.2W字 | 了不起的 TypeScript 入门教程:这是掘金最受欢迎的 TypeScript 入门课程,作者将 TypeScript 的入门知识分为了十四个知识点,一步步带你学习。 https://juejin.cn/post/6844904182843965453
2022-04-20 - 请务必优秀fetch('https://61c48e65f1af4a0017d9966d.mockapi.io/products')这个接口没有怎么模拟呢
作者回复: 这是那个接口?
2022-04-202 - Asterisk讲的也有点太简单了,能不能把关键的地方,或者容易入坑的地方好好讲讲。至于基础知识这个官网讲的就挺好了。2022-10-19归属地:北京2
- Sunnyexport default function ProductTable() { // ... } 请教一下,这也是声明组件么 ?为什么不用 class 声明 ?2022-04-0552
- 江左小海为什么有jsx,tsx,不都是JS吗,Android开发,对这一块不懂,这个项目也运行不起来,第一个ProductTabled的id找不到,删除后,又说ProductRow没有引入2022-07-1231
- angelajinggithub能否添加一个readme.md文件,详细介绍下怎样执行每个示例的代码。因为是初学者,对Android studio的run配置和npm、npx react-native命令行都不太熟悉。2023-11-26归属地:辽宁
- 左手指月countObject.num === countObject.num // false 真的没问题么,复制到浏览器是true耶2023-08-16归属地:广东
收起评论