React Native 新架构实战课
蒋宏伟
58 同城前端架构师,58RN 负责人
18214 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
React Native 新架构实战课
15
15
1.0x
00:00/00:00
登录|注册

04|State:如何让页面“动”起来?

你好,我是蒋宏伟。
那么这一讲,我们来讲搭建页面的第二步,让页面“动”起来,这里的“动”说的是在不同场景下,让页面展示出不同的内容。
怎么让页面“动”起来呢?这就要用到状态 State 了。
一个页面也好,一个应用也好,只有把状态设计清楚了,程序才能写得好。讲到状态,有些人可能会说,状态不就是页面中那些会“动”的数据吗?这很简单,还有什么好讲的。
这没错,状态确实是页面中会“动”的数据,但是要把状态用好不容易,有时候容易把状态设计复杂了,不仅代码要写得更多,还容易导致程序维护起来更麻烦。
这次,我会以搭建一个会“动”的简易购物车页面为例,和你分享下我在这方面的经验。简易购物车页面是这样的:
它比上一讲的商品表单页多了一些交互,它的所有数据都是从网络请求过来的,这些数据包括商品名称、商品价格、商品数量,数据从网络请求回来后会展示在页面上。你可以点击页面中的加号或减号,来添加数量或减少商品数量,底部的结算总价会随着商品数量的变化而变化。
要实现这个简易购物车的静态很简单,它只包括两个组件,商品表单组件 ProductTable 和商品组件 ProductRow。完成静态页面的搭建后,接下来就要让页面“动”起来了,我把这个过程分成了 4 步来实现,状态初选、状态确定、状态声明、状态更新。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

在React中使用状态(State)来实现页面动态效果是一项重要技能。本文以搭建一个简易购物车页面为例,详细介绍了状态的初选、确定和声明过程。在状态初选阶段,作者指出了程序事件和用户操作可能导致页面变化,从而找出了会变化的数据作为初选状态。在状态确定阶段,作者强调了一个状态对应一件事情、重复状态不是状态以及可计算出来的状态不是状态的原则,并确定了网络请求状态和商品列表状态。在状态声明阶段,作者介绍了使用useState钩子函数来管理函数组件的状态,并强调了在React中使用钩子函数的注意事项。此外,文章还详细讨论了如何更新对象和数组类型的状态,以及在状态管理过程中需要注意的细节。通过本文的总结,读者可以快速了解如何在React中使用状态来实现页面的动态效果,以及在状态管理过程中需要注意的细节。文章内容深入浅出,适合初学者快速上手。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《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-20
    2
  • Asterisk
    讲的也有点太简单了,能不能把关键的地方,或者容易入坑的地方好好讲讲。至于基础知识这个官网讲的就挺好了。
    2022-10-19归属地:北京
    2
  • Sunny
    export default function ProductTable() { // ... } 请教一下,这也是声明组件么 ?为什么不用 class 声明 ?
    2022-04-05
    5
    2
  • 江左小海
    为什么有jsx,tsx,不都是JS吗,Android开发,对这一块不懂,这个项目也运行不起来,第一个ProductTabled的id找不到,删除后,又说ProductRow没有引入
    2022-07-12
    3
    1
  • angelajing
    github能否添加一个readme.md文件,详细介绍下怎样执行每个示例的代码。因为是初学者,对Android studio的run配置和npm、npx react-native命令行都不太熟悉。
    2023-11-26归属地:辽宁
  • 左手指月
    countObject.num === countObject.num // false 真的没问题么,复制到浏览器是true耶
    2023-08-16归属地:广东
收起评论
显示
设置
留言
19
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部