父传子

通过props将父组件中的属性传递给子组件

  1. // 父组件
  2. class Fal extends React.Component {
  3. state = {
  4. name:'laoli'
  5. },
  6. render (){
  7. return (<San name={this.state.name} />)
  8. }
  9. }
  10. // 子组件
  11. class San extends ReactComponent{
  12. state = {},
  13. render()=>{
  14. return (<p>{this.props.name}</p>)
  15. }
  16. }

子传父

在父组件中准备一个方法
将这个方法传递给子组件
子组件调用这个方法,通过参数形式传递数据

  1. // 父组件
  2. class Fal extends React.Component{
  3. state = {
  4. age:''
  5. }
  6. // 回调函数
  7. getAge = data => {
  8. consoles.log('获取到的子组件数据'data)
  9. // 更新父组件数据
  10. this.setState({
  11. age:data
  12. })
  13. }
  14. render(){
  15. return (<San getage = { this.gatAge } />)
  16. }
  17. }
  18. // 子组件
  19. class San extends React.Component{
  20. state = {
  21. age:18
  22. }
  23. handleClick = () =>{
  24. // 调用传递来的方法
  25. this.props.getage(this.state.age)
  26. }
  27. rebder(){
  28. return (<button onClick = { this.handleClick } >按钮</button>)
  29. }
  30. }

兄弟组件间数据传递

状态提升思想
将兄弟间需要通信的数状态提升到一个公用的父组件中
父组件提供状态和操作状态的方法
两个子组件通过props接收父组件中的状态

  1. // 父组件
  2. class Fal extends React.Component{
  3. // 公共状态
  4. state = {
  5. num:12
  6. }
  7. // 操作状态
  8. pusNum=data=>{
  9. this.setState({num,data})
  10. }
  11. render(){
  12. return (
  13. <div>
  14. <Gege num={this.state.num} pusNum={this.pusNum}/>
  15. <Didi num={this.state.num} pusNum={this.pusNum}/>
  16. </div>
  17. )}
  18. }
  19. // 哥哥组件
  20. const Gege= props => {
  21. function handelClick(){
  22. props.pusNum(15)
  23. }
  24. return <div>
  25. {props.num}
  26. <button onClick={handelClick}>加</button>
  27. </div>
  28. }
  29. // 弟弟组件
  30. class Didi extends React.Component{
  31. handelClick=()=>{
  32. this.props.pusNum(1)
  33. }
  34. render (){
  35. return <div>
  36. {this.props.num}
  37. <button onClick={this.handelClick}>减</button>
  38. </div>
  39. }
  40. }

跨多级组件间数据的传递

在跨越多级组件的情况下,使用Context进行数据的传递

  1. // 调用 React.createContext 方法拿取其中的两个组件
  2. const {Provider,Consumer} = React.createContext()
  3. // provider 负责传递数据
  4. // Consumer 负责接收数据
  5. // 一级组件
  6. class One extends React.Component{
  7. render(){
  8. return (
  9. // 使用Provider组件 包裹当前其他内容 使用value属性进行数据传递
  10. <Provider value='一级'>
  11. <div>一级</div>
  12. <Tow/>
  13. </Provider>
  14. )
  15. }
  16. }
  17. // 二级组件
  18. class Tow extends React.Component {
  19. render() {
  20. return (
  21. <div>
  22. <div>二级</div>
  23. <Ser />
  24. </div>
  25. )
  26. }
  27. }
  28. // 三级组件
  29. class Ser extends React.Component {
  30. render() {
  31. return (
  32. // 使用Consumer组件 调用回调接收数据 返回其他的JSX结构
  33. <Consumer>{data => <div>三级接收到的数据 {data}</div>}</Consumer>
  34. )
  35. }
  36. }