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

最新文章

  1. 自己动手丰衣足食之 jQuery 数量加减插件
  2. js函数和jquery函数详解
  3. Django的cookie和session
  4. 什么是CSR证书申请文件?
  5. 2014 Super Training #8 C An Easy Game --DP
  6. Jquery——思维导图
  7. oracle 表查询一
  8. web自定义控件UserControl
  9. Javascript获取URL地址变量参数值的方法
  10. 安卓AlertDialog的使用
  11. mysql字符串连接,重复等字符串函数总结
  12. python 序列话模块 常用
  13. Tomcat如何实现WebSocket
  14. PHP扩展高性能日志系统SeasLog简单上手
  15. uboot的启动过程-FDT
  16. php的运行原理、cgi对比fastcgi以及php-cgi和php-fpm之间的联系区别
  17. [SDOI2015]序列统计(多项式快速幂)
  18. SQL语句中 int 溢出 + Asp语句中 Long 溢出
  19. 洛谷P5234 越狱老虎桥 [JSOI2012] tarjan
  20. AngularJS——第5章 作用域

热门文章

  1. Redis实践系列丨Codis数据迁移原理与优化
  2. HTML5裁剪图片并上传至服务器实现原理讲解
  3. 【扩展知识2】函数strlen()和非函数sizeof的使用
  4. Webx框架:依赖注入
  5. Error 99 connecting to 192.168.3.212:6379. Cannot assign requested address
  6. mysql03---触发器
  7. Linux下安装Openfire 4.2.1
  8. 测试SQL基础知识
  9. python3中digest()和hexdigest()区别
  10. MHA高可用 MHA+Keepalive