组件拆分
   
    以之前做的TodoList为例,先将其进行组件拆分
    
    (参考上一篇文章:
    
     React入门(TodoList实例)
    
    )
    
    在src目录下,新建一个TodoItem.js,写好基础结构
   
import React, { Component } from 'react';
class TodoItem extends Component {
  render() {
    return (
      <div >TodoItem</div>
    );
  }
}
export default TodoItem;
在TodoList.js文件中引入
import TodoItem from './TodoItem'
    将
    
     <li>...</li>
    
    标签更换为
    
     <TodoItem />
    
    
    
    父组件向子组件传值
   
把父组件中item的值传递给TodoItem子组件,可以使用组件属性的形式
<TodoItem content={item}/> // 把item作为TodoItem属性content的值
    在子组件中,通过
    
     this.props.xxx
    
    的形式接收
   
<div>{this.props.content}</div>
    
    
    子组件向父组件传递数据
   
    
     react是单向数据流
    
    ,所以在子组件中无法对父组件传递过来的值进行操作,需要借助父组件的方法,通过调用父组件的方法,在子组件中操作父组件中的数据
    
    子组件要调用父组件方法,和传递数据差不多,只要在组件调用时,把方法传递给子组件就可以了
    
    实现删除子项的功能
   
// TodoList.js
<ul>
  {
    this.state.list.map((item,index)=>{
      return (
        <XiaojiejieItem 
        key={index+item}  
        content={item}
        index={index}
        deleteItem={this.deleteItem.bind(this)}
        />
      )
    })
  }
</ul>
// TodoItem.js
handleDelete = () => {
  this.props.handleDelete(this.props.index)
}
render() {
  return (
    <div onClick={this.handleDelete}>{this.props.content}</div>
  );
}
    
    
    使用 PropTypes 进行类型检查
   
    在TodoItem中,可以使用PropTypes进行对父组件传递进来的值类型校验
    
    在TodoItem.js中先引入PropTypes
   
import React, { Component } from 'react';
    引入后,就可以在组件的下方进行引用了
    
    可以对值进行数据类型检查
   
TodoItem.propTypes = {
  content: PropTypes.string,
  handleDelete: PropTypes.func,
  index: PropTypes.number
}
也可以做必传值校验
TodoItem.propTypes = {
  content: PropTypes.string.isRequired
}
还可以设置默认值
TodoItem.defaultProps = {
  content: 'learn react'
}
    关于
    
     使用 PropTypes 进行类型检查
    
    ,在官方文档中写得很清楚,有需要的可以进行查看
   
    
    
    重点
   
- 
     
父组件向子组件传值,使用属性的形式进行传递。
 - 
     
子组件无法直接操作父组件的数据,通过调用父组件传递过来的方法来操作父组件的数据