rops理解:

大多数组件都可以在创建的时候被不同的参数定制化,这些不同的参数就叫做props.
props的流向是父组件到子组件。

子组件Comment,是一条评论组件,父组件CommentList,展示了所有的评论内容,父组件在使用子组件的时候也就是<Comment />时候,不仅仅想使用一个普通的Comment组件,想要使用一个定制化的Comment组件<Comment text='aaa' />,text定制的是Comment的内容,,这里 text 是一个props,  父组件的想法很好,但是没有子组件的配合无法实现。那么在渲染组件的时候,子组件如何实现这个定制呢?子组件需要通过this.props.text获取父组件对自己的定制化,通常情况下,并不是所有的子组件都能获得父组件的青睐,防止子组件未获取父组件props,那么给子组件Comment组件加上static defaultProps = {text:'我是默认的'}

  //子组件Comment
class Comment extends Component {
static defaultProps = {text:'我是默认的'}
render () {
return (
<div>{this.props.text}</div>
)
}
}
  //父组件CommentList
class CommentList extends Component {
render () {
return (
<Comment text='aaa' />
<Comment text='bbb' />
<Comment />
)
}
}

State理解:

state主要是组件自己用来控制自己的状态的,通过setState控制,比如一个开关有两种状态,on off,组件一开始的状态是off用代码表示为this.state={status:'off'},现在希望点击一下就改变(setState)自己的状态,点击组件属于组件自己的行为,点击后开关变化是自己状态变化,整体是自己的行为改变了自己的状态,这就是state的作用。

Props vs States:

Props:

  1. 不可变的
  2. 用于从您的视图控制器(您的顶级组件)向下传递数据
  3. 更好的性能,使用它将数据传递给子组件

State:

  1. 应该在您的视图控制器(您的顶级组件)中进行管理,
  2. 易变的
  3. 不要从子组件访问它,而是用props传递它

Props和State合作:

Props和State合作可以将父组件的state传给子组件。

以下面的代码为例子(来自ReactJs小书 ScriptOS),Screen是子组件,Computer是父组件,两个状态on off,关的时候Screen内容是“显示器关了”,开的时候是“显示器亮了”,Screen有一个初始内容“无内容”,给Computer设置两个state,一个是status开关状态,一个是content,Screen一个props showContent,通过<Screen showContent={this.state.content}/>将Computer的state传给Screen作为Screen的props,Screen通过this.props.showContent获取。

 class Computer extends Component {
constructor (props) {
super(props);
this.state = {
status:'off',
content:'显示器关了'
}
}
handleClick () {
if(this.state.status === 'on') {
this.setState({
status:'off',
content:'显示器关了'
})
}
else{
this.setState({
status:'on',
content:'显示器亮了'
})
}
}
render () {
return (
<div>
<button onClick={this.handleClick.bind(this)}>开关</button>
<Screen showContent={this.state.content}/>
</div>
)
}
} class Screen extends Component {
static defaultProps = {showContent:'无内容'};
render () {
return (
<div className='screen'>
{this.props.showContent}
</div>
)
}
}

Props和State合作可以将子组件的props传给父组件的state。

父组件Father,子组件Son,现在需要点击子组件Son的submit 时把子组件输入框的值传到父组件中

实现方式,首先子组件需要获取自己输入框的值,保存到自己的state中

这时候输入框变成了受控组件,其所有状态属性的更改都由React 来控制,也就是说它根据组件的propsstate来改变组件的UI表现形式。而不越过state等直接响应用户输入的值,也就是用户已经无法输入了,给text添加onChange事件,通过setState来响应用户输入的值。

假设输入了aaa,则aaa已经在组件Son的state里面了,如何将Son的state传给Father的state,是下一步的目标。别的暂且不管,至少知道传数据是通过Son的button点击事件响应的。

假设Father已经获取了数据,Father需要处理函数来setState

父组件Father给子组件Son定制一个属性onSubmit,当Son使用这个属性的时候能够传参数text并调取Father处理函数callBack

ReactJS-2-props vs state的更多相关文章

  1. reactjs中props和state最佳实践

    http://blog.csdn.net/dangnian/article/details/50998981

  2. React 深入系列3:Props 和 State

    文:徐超,<React进阶之路>作者 授权发布,转载请注明作者及出处 React 深入系列3:Props 和 State React 深入系列,深入讲解了React中的重点概念.特性和模式 ...

  3. React中Props 和 State用法

    React中Props 和 State用法 1.本质 一句话概括,props 是组件对外的接口,state 是组件对内的接口.组件内可以引用其他组件,组件之间的引用形成了一个树状结构(组件树),如果下 ...

  4. react native中对props和state的理解

    最近使用react native这个新的技术做完一个项目,所以赶紧写个博客巩固一下. 今天我想说的是props和state,当然这是我个人的理解,如果有什么不对的地方,望指正. 首先我先说说props ...

  5. props 和 state的区别

    作者:孙志勇 微博 日期:2016年11月29日 一.时效性 所有信息都具有时效性.文章的价值,往往跟时间有很大关联.特别是技术类文章,请注意本文创建时间,如果本文过于久远,请读者酌情考量,莫要浪费时 ...

  6. 关于props和state以及redux中的state

    React的数据模型分为共有数据和私有数据,共有数据可以在组件间进行传递,私有数据为当前组件私有.共有数据在React中使用props对象来调用,它包含标签所有的属性名称和属性值,props对象有三个 ...

  7. ReactNative之从HelloWorld中看环境搭建、组件封装、Props及State

    开篇呢,先给大家问个好,今天是中秋节,祝大家中秋节快乐!!虽然是中秋节,但是木有回家还是总结一下知识点写写博客吧,想着昨天总结一下的,但是昨天和几个同学小聚了一下,酒逢知己总是千杯少呢,喝的微醺不适合 ...

  8. React Native基础&入门教程:以一个To Do List小例子,看props和state

    本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在上篇中,我们介绍了什么是Flexbox布局,以及如何使用Flexb ...

  9. React中props和state相同点和不同点

    朋友们,我想死你们了,最近这几天忙着和病魔作斗争所以没怎么写博客,今天感觉好点了,赶紧来写一波,就是这木敬业. 今天我们来讨论讨论props和state相同点和不同点 首先我来概要说明一下这两者 pr ...

  10. React中props与state

    以下内容均为个人理解. 1.state: 在react中,state可以看成管理页面状态的集合(实则一个对象而已),库里面的成员均为页面渲染变量,整个页面为一个状态机,当state发生变化时,页面会重 ...

随机推荐

  1. redis缓存数据库的详解

    1,什么是redis? Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库 Redis与其他key-value缓存产品有以下三个特点: Redis支持数据的持久化,可以 ...

  2. Codeforces Round #261 (Div. 2)——Pashmak and Graph

    题目链接 题意: n个点.m个边的有向图.每条边有一个权值,求一条最长的路径,使得路径上边值严格递增.输出路径长度 )) 分析: 由于路径上会有反复点,而边不会反复.所以最開始想的是以边为状态进行DP ...

  3. Lightoj 1006 Hex-a-bonacci

    Given a code (not optimized), and necessary inputs, you have to find the output of the code for the ...

  4. centos7下比特币源码编译安装

    今天我们介绍比特币的源码安装过程,是利用编译安装的 首先安装依赖 1 yum install -y boost-devel qt-devel protobuf-devel qrencode-devel ...

  5. unbantu安装mysql

    1,方法一 sudo apt-get install mysql-server apt isntall mysql-client apt install libmysqlclient-dev(暂不知用 ...

  6. redis过期键删除策略以及大key删除方法

    今天遇到了一个前同事挖的坑,刷新缓存中商品信息时先让key过期,然后从数据库里取最新数据然后再放到缓存中,他是这样写的 redisTemplate.expire(CacheConst.GOOGS_PR ...

  7. 洛谷 P3621 [APIO2007]风铃【贪心】

    没有算法,但是要注意细节. 首先无解的情况,显然的是最小深度的叶子节点和最大深度的叶子节点的深度差大于1:还有一种比较难想,就是如果一个点的左右子树都有最大和最小深度的叶子节点,这样交换左右子树也不行 ...

  8. 洛谷P1505 [国家集训队]旅游(树剖+线段树)

    传送门 这该死的码农题…… 把每一条边变为它连接的两个点中深度较浅的那一个,然后就是一堆单点修改/路径查询,不讲了 这里就讲一下怎么搞路径取反,只要打一个标记就好了,然后把区间和取反,最大最小值交换然 ...

  9. 小程序 video 层级,原生组件

    原生组件的层级是最高的,所以页面中的其他组件无论设置 z-index 为多少,都无法盖在原生组件上. 后插入的原生组件可以覆盖之前的原生组件. 原生组件还无法在 scroll-view.swiper. ...

  10. 【原创】《从0开始学RocketMQ》—集群搭建

    用两台服务器,搭建出一个双master双slave.无单点故障的高可用 RocketMQ 集群.此处假设两台服务器的物理 IP 分别为:192.168.50.1.192.168.50.2. 内容目录 ...