React业务实践
总结自:http://reactjs.cn/react/docs/thinking-in-react-zh-CN.html
当接到一个需求时,如何用react来实现? 以下几个步骤做参考。
第一步:把UI拆分为一个组件的层级
组件拆分原则:单一功能原则(single responsibility principle),也就是一个组件在理想情况下只做一件事情。如果它最终增长了,它就应该被分解为更小的组件。
第二步:用React创建一个静态版本
构建一个静态版本 app 来渲染你的数据模型,重用其它组件并利用 props 传递数据。可以自顶向下或自底向上的构建组件,也就是说,你可以既从较高的层级也可以从较低的层级开始构建组件。在较简单的例子里,通常自顶向下要容易一些,然而在更大的项目上,自底向上地构建更容易,并且更方便伴随着构建写测试。
第三步:确定最小但完备的UI state值(发生变化的)
要让你的UI互动,你需要做到触发底层数据模型发生变化。React用 state 来让此变得容易。要正确的构建你的 app,你首先需要思考你的 app 需要的可变 state 的最小组。这里的关键是 DRY 原则:Don't Repeat Yourself(不要重复自己)。
state值至少满足下面三个条件:
1. 不是从父级传递来的props
2. 随时间发生变化
3. 不能基于其他任何组件里的 state 或者 props 计算
第四步:确定你的 state 应该存在哪个组件里
React 总是在组件层级中单向数据流动的。
对于你的应用里每一个数据块:
1. 确定哪些组件要基于 state 来渲染内容。
2. 找到一个共同的拥有者组件(在所有需要这个state组件的层次之上,找出共有的单一组件)。
3. 要么是共同拥有者,要么是其他在层级里更高级的组件应该拥有这个state。
4. 如果你不能找到一个组件让其可以有意义地拥有这个 state,可以简单地创建一个新的组件 hold 住这个state,并把它添加到比共同拥有者组件更高的层级上。
找到共同拥有者的组件后:
1. 初始化state值。
2. 然后将state值传到需要调用的子组件里。
3. 子组件通过this.props.STATENAME拿到状态值,然后做相应的操作。
第五步:添加反向数据流
拥有者的组件以 props 和 state 沿着层级向下流动的功能正确渲染。现在增加另一种数据流动的方式: 在层级深处的某个子组件需要更新拥有者组件里的 state。
1. 由于组件应该只更新自己拥有的 state,父组件将会传递一个回调函数给子组件。每当子组件 state 应被更新时回调函数就会被调用。
2. 我们可以在子组件上定义事件来接受父组件的通知。父组件传递的回调函数将会调用 setState() ,然后应用将会被更新。
React业务实践的更多相关文章
- STORM在线业务实践-集群空闲CPU飙高问题排查
源:http://daiwa.ninja/index.php/2015/07/18/storm-cpu-overload/ 2015-07-18AUTHORDAIWA STORM在线业务实践-集群空闲 ...
- [转] React 最佳实践——那些 React 没告诉你但很重要的事
前言:对很多 react 新手来说,网上能找到的资源大都是些简单的 tutorial ,它们能教会你如何使用 react ,但并不会告诉你怎么在实际项目中优雅的组织和编写 react 代码.用谷歌搜中 ...
- React最佳实践(1)
React最佳实践不敢妄谈,但最差实践非知乎莫属. 旧版知乎看起来土了点,但体验流畅,起码用起来舒服. 新版知乎看起来UI现代化,技术实现上采用了React,但是可能因为知乎缺钱,请不起高水平的前端工 ...
- react项目实践——(1)使用webpack创建项目
1. 新建文件夹,命名为项目名称——myapp,并打开myapp文件夹. mkdir webpack-demo && cd webpack-demo 2. 在./myapp中打开命令行 ...
- 马蜂窝视频编辑框架设计及在 iOS 端的业务实践
(马蜂窝技术公众号原创内容,ID: mfwtech) 熟悉马蜂窝的朋友一定知道,点击马蜂窝 App 首页的发布按钮,会发现发布的内容已经被简化成「图文」或者「视频」. 长期以来,游记.问答.攻略等图文 ...
- Fetch方法封装、业务实践
说Fetch之前啊,我们不得不说一说Ajax了,以前使用最多的自然是jQuery封装的Ajax方法了,强大而且好用. 有人说了,jQuery的Ajax都已经封装得那么好了,你还整Fetch干什么,这不 ...
- 携程React Native实践
React Native(下文简称 RN)开源已经一年多时间,国内各大互联网公司都在使用,携程也在今年 5 月份投入资源开始引入,并推广给多个业务团队使用,本文将会分享我们遇到的一些问题以及我们的优化 ...
- 我的 React 最佳实践
There are a thousand Hamlets in a thousand people's eyes. ----- 威廉·莎士比亚 免责声明:以下充满个人观点,辩证学习 React 目前开 ...
- React Native实践之携程Moles框架
编者:本文来自携程框架研发部高级经理魏晓军在第二期[携程技术微分享]上的分享,以下为整理后的文字实录.视频回放可点击这里.关注携程技术中心微信公号ctriptech,可获知更多微分享课程信息. 因为支 ...
随机推荐
- 兼容 IE input button 左右内边距的增加
IE 下的按钮标签(input.button)会随着文字的增加导致文本左右两侧的间距越来越大.该问题存在于 IE6/IE7,IE8~IE10 没发现类似问题.一般情况下,只要给按钮标签设置 overf ...
- 用Kotlin开发Android应用(III):扩展函数和默认值
这是关于Kotlin的第三篇. 原文标题:Kotlin for Android (III): Extension functions and default values 原文链接:http://an ...
- iOS百度地图SDK集成详细步骤
1.iOS百度地图下载地址 http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download 根据需要选择不同的版本 ...
- 【代码笔记】iOS-获得现在的周的日期
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, ...
- JAVA实现图片裁剪
/** * 裁剪图片 * @param src 源图片 * @param dest 裁剪后的图片 * @param x 裁剪范围的X坐标 * @param y 裁剪范围的Y坐标 * @param w ...
- Git:Git初体验——Git安装配置
作为即将成为一个程序员的男人,一直在听别人说Git多好多好,之前也随便了解了一些,但是始终没有决心去学会.现在大四了,只有毕设和一门开学六七周只去过一次课的全员必修课外,也没有什么事情做,何不去做这些 ...
- C#的HTTP开发包 HttpLib
HttpLib 可以用来简化在 C# 应用中异步的访问 Web 服务的操作.同时包含文件上传和访问网页的方法. 支持: GET POST Form Encoded Multipart File Upl ...
- Ajax中Get请求与Post请求的区别
Get请求和Post请求的区别 1.使用Get请求时,参数在URL中显示,而使用Post方式,则不会显示出来 2.使用Get请求发送数据量小,Post请求发送数据量大 例子 页面的HTML代码: &l ...
- C# KeyValuePair<TKey,TValue>的用法-转载
C# KeyValuePair<TKey,TValue>的用法.结构体,定义可设置或检索的键/值对.也就是说我们可以通过 它记录一个键/值对这样的值.比如我们想定义一个ID(int类型)和 ...
- ORA-12520: TNS:listener could not find available handler for requested type of server
当你碰到ORA-12520错误时,如下所示: 英文错误提示: ORA-12520: TNS:listener could not find available handler for requeste ...