React.js 小书 Lesson12 - state vs props

本文作者:胡子大哈
本文原文:http://huziketang.com/books/react/lesson12

转载请注明出处,保留原文链接以及作者信息

在线阅读:http://huziketang.com/books/react


我们来一个关于 stateprops 的总结。

state 的主要作用是用于组件保存、控制、修改自己的可变状态。state 在组件内部初始化,可以被组件自身修改,而外部不能访问也不能修改。你可以认为 state 是一个局部的、只能被组件自身控制的数据源。state 中状态可以通过 this.setState 方法进行更新,setState 会导致组件的重新渲染。

props 的主要作用是让使用该组件的父组件可以传入参数来配置该组件。它是外部传进来的配置参数,组件内部无法控制也无法修改。除非外部组件主动传入新的 props,否则组件的 props 永远保持不变。

stateprops 有着千丝万缕的关系。它们都可以决定组件的行为和显示形态。一个组件的 state 中的数据可以通过 props 传给子组件,一个组件可以使用外部传入的 props 来初始化自己的 state。但是它们的职责其实非常明晰分明:state 是让组件控制自己的状态,props 是让外部对组件自己进行配置

如果你觉得还是搞不清 stateprops 的使用场景,那么请记住一个简单的规则:尽量少地用 state,尽量多地用 props

没有 state 的组件叫无状态组件(stateless component),设置了 state 的叫做有状态组件(stateful component)。因为状态会带来管理的复杂性,我们尽量多地写无状态组件,尽量少地写有状态的组件。这样会降低代码维护的难度,也会在一定程度上增强组件的可复用性。前端应用状态管理是一个复杂的问题,我们后续会继续讨论。

React.js 非常鼓励无状态组件,在 0.14 版本引入了函数式组件——一种定义不能使用 state 组件,例如一个原来这样写的组件:

class HelloWorld extends Component {constructor() {super()}sayHi () {alert('Hello World')}render () {return (<div onClick={this.sayHi.bind(this)}>Hello World</div>)}
}

用函数式组件的编写方式就是:

const HelloWorld = (props) => {const sayHi = (event) => alert('Hello World')return (<div onClick={sayHi}>Hello World</div>)
}

以前一个组件是通过继承 Component 来构建,一个子类就是一个组件。而用函数式的组件编写方式是一个函数就是一个组件,你可以和以前一样通过 <HellWorld /> 使用该组件。不同的是,函数式组件只能接受 props 而无法像跟类组件一样可以在 constructor 里面初始化 state。你可以理解函数式组件就是一种只能接受 props 和提供 render 方法的类组件。

但本书全书不采用这种函数式的方式来编写组件,统一通过继承 Component 来构建组件。

下一节中我们将介绍《React.js 小书 Lesson13 - 渲染列表数据》。

React.js 小书 Lesson12 - state vs props相关推荐

  1. React.js 小书 Lesson1-2 - 前端组件化(一):从一个简单的例子讲起

    React.js 小书 Lesson1-2 - 前端组件化(一):从一个简单的例子讲起 本文作者:胡子大哈 本文原文:http://huziketang.com/books/react/lesson2 ...

  2. React.js 小书 Lesson27 - 实战分析:评论功能(六)

    React.js 小书 Lesson27 - 实战分析:评论功能(六) 本文作者:胡子大哈 本文原文:http://huziketang.com/books/react/lesson27 转载请注明出 ...

  3. React.js 小书 Lesson15 - 实战分析:评论功能(二)

    作者:胡子大哈 原文链接: http://huziketang.com/books/react/lesson15 转载请注明出处,保留原文链接和作者信息. 上一节我们构建了基本的代码框架,现在开始完善 ...

  4. React.js 小书 Lesson18 - 挂载阶段的组件生命周期(一)

    React.js 小书 Lesson18 - 挂载阶段的组件生命周期(一) 本文作者:胡子大哈 本文原文:http://huziketang.com/books/react/lesson18 转载请注 ...

  5. React.js小书总结

    (迁移自旧博客2017 08 27) 第一阶段 react的组件相当于MVC里面的View. react.js 将帮助我们将界面分成了各个独立的小块,每一个块就是组件,这些组件之间可以组合.嵌套,就成 ...

  6. React.js 小书 Lesson24 - PropTypes 和组件参数验证

    作者:胡子大哈 原文链接: http://huziketang.com/books/react/lesson24 转载请注明出处,保留原文链接和作者信息. 我们来了到了一个非常尴尬的章节,很多初学的朋 ...

  7. React.js 小书 Lesson14 - 实战分析:评论功能(一)

    React.js 小书 Lesson14 - 实战分析:评论功能(一) 本文作者:胡子大哈 本文原文:http://react.huziketang.com/blog/lesson14 转载请注明出处 ...

  8. React.js 小书 Lesson5 - React.js 基本环境安装

    React.js 小书 Lesson5 - React.js 基本环境安装 本文作者:胡子大哈 本文原文:http://huziketang.com/books/react/lesson5 转载请注明 ...

  9. 专访小书作者刘传君:练太极的“读书机器”

    访谈嘉宾:刘传君 刘传君,创过业.做过产品.一个爱读书,喜欢分享的程序员.先后在图灵社区出版了<HTTP小书><Git小书><Vue.js小书><Swift ...

最新文章

  1. lombok 构造函数_java程序员提高开发效率必备工具lombok,不会你就out了
  2. 我使用过的Linux命令之sftp - 安全文件传输命令行工具
  3. 德国市占率第一的科沃斯携最新扫地机器人亮相IFA展
  4. C++构造函数和文件组织
  5. 济南计算机机械工程学校,济南电子机械工程学校
  6. python中xpath定位下拉菜单_Selenium2+Python3.6实战(八):定位下拉菜单出错,如何解决?用select或xpath定位。...
  7. 《C++ Primer》13.1.6节练习(部分)
  8. java压缩/解压缩zip格式文件
  9. 为什么程序员更喜欢用google搜索? 因为正经!
  10. 常见的多变查询,和遇到的一些坑。。。。
  11. redis-数据类型-列表list类型
  12. 《集体智慧编程》代码勘误:第六章
  13. C语言教程第六章:指针(1)
  14. EnterCriticalSection 多线程操作相同数据遇到的问题(线程锁)
  15. EasyUI:中datagrid数据表格的删除、编辑、保存、撤销功能实现
  16. Java后台开发精选知识图谱
  17. PHP读取Excel数据
  18. 读《Scratch 2.0 少儿游戏趣味编程》
  19. android 远距离识别,远距离 人脸识别!
  20. Python 从 Excel 读取链接下载文件

热门文章

  1. 接到三无产品的测试需求时怎么办
  2. k8s 重要概念 - 每天5分钟玩转 Docker 容器技术(117)
  3. ECMAScript 6入门
  4. 在controller中无法通过注解@Value获取到配置文件中定义的值解决办法
  5. shell编程基础之基本文本工具集合
  6. vuejs学习笔记(1)--属性,事件绑定,ajax
  7. Kafka设计解析(二):Kafka High Availability (上)
  8. this Activity.this Activity.class
  9. inline-block 间距
  10. C++文件输入和输出