React组件开发小记(二)—— React的数据

       刚从JQ转向React进行开发的时候,领导和我说了一句话 “React组件的数据,是谁持有,谁消费”。其实当时并不明白这句话什么意思。现在对照JQ,把理解写下来。有错漏请看官指出。
       React中最重要的两个概念就是props和state。props是指父组件传递下来的属性(props可以是一个任意类型的数据),state是组件本身自我管理的状态。组件如何进行自我管理state,还有如何利用props,就成了初步使用react的第一个问题。
       首先必须明确的一点是在React中,数据只能单向的从父组件中传递给子组件。如果子组件想要把数据传递给父组件,只能通过props回调。即 props是一个方法,子组件调用这个方法,可以把想要给父组件的数据通过参数传回去。
       明白了以上三点,开始这篇的话题。

       现在有个场景。参照antd的Table组件,如下图:

table.png

       页面首次加载的时候,首先请求接口数据渲染表格。假设左上角的按钮修改了数据,会重新渲染表格。
       组件划分是:
       页面上有组件TableContainer,TableContainer包含左上角按钮,和Table组件(Button与Table未拆分)。
       刚开发这个表格,我想的方案是:在页面componentWillMount中请求接口,将返回的数据通过props传递下去。存入子组件的state。Table渲染state数据。点击按钮后重新请求接口,将数据更新state。
       这个思维方式被领导批评为仍然是JQ思想。按照我当时JQ的想法,按钮的事件中写好接口,然后接收数据。数据和页面无关。

       比较合适的方案:
       按钮组件和Table分离。数据是页面的,因此由页面处理。Button组件只负责通知页面要请求数据,具体这个发送等操作,还是由页面执行。Table组件只负责渲染。这就是所谓的“谁持有,谁消费”。
       首次请求数据,将数据存入页面的state中,在render中读取state,通过props一层层传递给Table组件。同时定义好一个请求数据的方法(假设方法名为getTableData)。将这个方法通过props传递给按钮组件。Button的click事件中调用getTableData方法。click事件被触发,则数据重新被请求,更新页面state。传下来使table数据刷新。
       第二种方案中,数据只在页面上操作,子组件只需要对数据进行渲染,不操作数据。即:所有的数据处理,都只在容器组件中处理。
       至于为什么这么做,下一篇(你为什么需要componentShouldUpdate?)中解释。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,961评论 1 18
  • 做React需要会什么? react的功能其实很单一,主要负责渲染的功能,现有的框架,比如angular是一个大而...
    苍都阅读 14,974评论 1 139
  • 目前,react组件有三种写法,分别是es5的createClass写法,es6的class写法,以及statel...
    ZoomFunc阅读 1,918评论 0 1
  • 只几天一直在给小侄女们读书,虽然断断续续。通过一本书一个故事就能反应出三个孩子许多不同。比如注意力,比如反应能力,...
    木木sani阅读 268评论 0 0
  • 《山河故人》——前尘,此刻,未来 1999年,澳门回归,沈涛在大年夜里跳伞舞,张晋生买了一辆德国产的进口汽车,并买...
    冬不拉lala阅读 981评论 0 2

友情链接更多精彩内容