react-通信-非父子通信-中间人模式

非父子组件通信方式

(1)状态提升(中间人模式)

React中的状态提升概括来说,就是将多个组件需要共享的状态提升到它们最近的父组件上在父组件上,改变这个状态然后通过props分发给子组件.

/*
 * @Author: Spring
 * @LastEditors: Aidam_Bo
 * @LastEditTime: 2023-01-02 16:19:28
 */
import React, { Component } from 'react';
import axios from 'axios';
import "./css/bro.css"
//父组件
export default class Brother extends Component {
    state={
        filmList:[],
        detail:""
    }
    constructor(){
        super();
        //模拟数据
        axios.get(`/test.json`).then(res => {
            console.log(res.data.data.films);
            this.setState({
                filmList:res.data.data.films
            })
        })
    }
  render() {
    return (
      <div>
            {
                this.state.filmList.map(item =>
                    <div>
                        {/* {...item}:展开赋值 */}
                        <FilmItem key={item.filmId} {...item} eventClick={(name,synopsis)=>{
                            console.log("父组件接收",name,synopsis);
                            this.setState({
                                detail:synopsis
                            })
                        }}></FilmItem>
                        <FilmDetail key={item.filmId} detail={this.state.detail}></FilmDetail>
                    </div>
                    )
            }
      </div>
    )
  }
}

//子-受控组件
class FilmItem extends Component{
    render(){
        let {name,poster,synopsis} =this.props;//解构赋值
        return <div className='FilmItem' onClick={()=>{
            /* console.log("调用",name,synopsis); */
            this.props.eventClick(name,synopsis);
        }}>
           <img src={poster} alt={name}/>
           <h2>{name}</h2>
        </div>
    }
}

//子-受控组件
class FilmDetail extends Component{
    render(){
        let {detail} =this.props;//解构赋值
        return <div className='FilmDetail'>
           <h3>{detail}</h3>
        </div>
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值