首页 > 其他分享 >003*:通信(父子通信,非父子通信)

003*:通信(父子通信,非父子通信)

时间:2024-01-26 15:11:47浏览次数:21  
标签:003 return 通信 value detail 父子 item 组件

目录

 

正文

1:父子传值-回调函数

2:父子传值-ref

3:中间人状态

4:订阅者模式

5:生产者消费者模式

/*
非父子通信方法3:官方提供
demo 案例:
一个电影列表,点击电影进入显示对应的详情页

案例分析:
1:axios 请求数据
2:map 映射循环渲染
3:一个 app 组件,一个 item 组件,一个 detail 组件。item 组件点击,detail 组件展示对应的详情。item 组件和 detail 组件通信
4:使用生产和消费者模式
*/

import React, { Component } from 'react'
import axios from 'axios'

// 1: 创建全局上下文对象
const GloablContext = React.createContext()

export default class FileItemDetailComponent extends Component {
    constructor(props) {
        super(props)

        this.state = {
            filemaList: [],
            detail: ""
        }
        axios.get('http://localhost:3000/cinema.json').then(res => {
            console.log(res.data)
            this.setState({
                filemaList: res.data.data.cinemas
            })
        })
    }
    render() {

        return (
            // 2:供应商包裹 div 组件,提供给消费者
            <GloablContext.Provider value={
                {
                    // 消费者通过 value 拿到数据
                    call: "打电话",
                    sms: "短信服务",
                    detail: this.state.detail,
                    // 5: 消费者消费数据,并修改数据,修改数据后,重新渲染组件,更新itemdetail 中的消费者数据
                    changeValue: (value) => {
                        this.setState({
                            detail: value
                        })
                    }
                }
            }>
                <div>
                    <ul>
                        {
                            this.state.filemaList.map(item => {
                                return (
                                    <FileItemComponent item={{ ...item }}></FileItemComponent>
                                )
                            })
                        }
                    </ul>
                    <FileDetailComponent></FileDetailComponent>
                </div>
            </GloablContext.Provider>
        )
    }
}


class FileItemComponent extends Component {
    render() {
        // 父传子,通过结构函数, 写一个回到函数(可以传递参数),里面 return 组件。
        var { name, address, cinemaId } = this.props.item
        return (
            // 3:消费者包裹组件,消费数据
            <GloablContext.Consumer>
                {
                    (value) => {
                        console.log(cinemaId)
                        return (
                            <div>
                                <li key={cinemaId} style={{ height: "80px" }} onClick={() => {
                                    console.log(address)
                                    // 4: 消费者消费数据,并修改数据
                                    value.changeValue(address)
                                }}>
                                    <span>{name}</span>
                                </li>
                            </div>
                        )
                    }
                }
            </GloablContext.Consumer>

        )
    }
}

class FileDetailComponent extends Component {
    render() {
        // 父传子,通过结构函数
        return (
            <GloablContext.Consumer>
                {
                    (value) => {
                        console.log(value)
                        return (
                            <div>
                                {/* 6:消费者显示更新之后的数据 */}
                                <h5>{value.detail}</h5>
                            </div>
                        )
                    }
                }
            </GloablContext.Consumer>
        )
    }
}

 

 

引用

标签:003,return,通信,value,detail,父子,item,组件
From: https://www.cnblogs.com/zyzmlc/p/17989445

相关文章

  • 洛谷题单指南-模拟和高精度-P1045 [NOIP2003 普及组] 麦森数
    原题链接:https://www.luogu.com.cn/problem/P1045题意解读:要计算2p-1的位数和最后500位,实际上只需要计算2p,两者位数一致,前者比后者个位减1即可,且个位肯定不会是0,比较容易处理。解题思路:如果直接采用高精度乘法计算2p,p最大3.1*106,高精度所用数组最长大概9*105,一共最多计算3.......
  • 进程间的通信(管道)
    (一)引入借助于消息队列,进程可以将消息放入队列中,然后由另一个进程从队列中取出。这种通信方式是非阻塞的,即发送进程不需要等待接收进程的响应即可继续执行。multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的进程间通信(IPC)方式二:管道(不推荐使用,了解即可......
  • 进程间通信(队列和生产消费模型)
    (一)引入(1)什么是进程间的通信IPC进程间通信(Inter-ProcessCommunication,IPC)是指两个或多个进程之间进行信息交换的过程它是一种计算机编程技术,用于在不同的进程之间共享数据和资源(2)如何实现进程间通信借助于消息队列,进程可以将消息放入队列中,然后由另一个进程从队列中取......
  • vue3 父子组件间的数据传递
    一、简介二、实际代码三、问题 一、简介vue父子组件的传递原则是单向的,子组件是无法修改父组件的参数,但是可以通过另一种渠道可以实现通信。       二、实际代码1父传子1.1 props 父组件内容<template><div>这里是父组件</div......
  • 使用Java中的OkHttp库进行HTTP通信:快速、简单且高效
    在Java的世界里,进行HTTP通信的方式多种多样。其中,OkHttp以其简单、高效和强大的功能受到了开发者的广泛欢迎。今天,我们就来深入探讨如何使用OkHttp库在Java中进行HTTP通信。首先,OkHttp是一个基于HTTP/2和SPDY的客户端,提供了现代且高效的通信方式。它不仅支持同步请求和异步请求,还提......
  • 工业4.0开放平台通信 统一架构OPC UA的一种测试方法
    工业4.0和工业物联网(IndustrialInternetofThings,IIoT)的核心挑战在于设备、机器以及来自不同行业服务之间的安全和标准化的数据和信息交换。2016年11月工业4.0平台发布了指导纲要《工业4.0产品需要实现哪些准则》,即对于所有位于工业网络中的产品,必须能够基于OPCUA的信息模型......
  • 流媒体通信中RTP/RTCP在项目中的应用
    一概述:本文档描述RTC通信中RTP/RTCP的应用以及当前项目中的使用策略。二RTP/RTCP协议简介2.1协议标准RTP由IETF(http://www.ietf.org/)定义在RFC3550和3551中。RTP被定义为传输音频、视频、模拟数据等实时数据的传输协议,与传统的注的高可靠的数据传输的运输层协议相比,它......
  • Python并发编程之进程间通信与线程间通信
    进程间通信与线程间通信【一】进程间通信(IPC)​ 进程间通信(Inter-ProcessCommunication,IPC)是指在不同进程之间进行数据交换和信息传递的机制。在多进程系统中,不同进程可能运行在不同的地址空间,因此需要一些特殊的方法来实现它们之间的通信。以下是一些常见的进程间通信的方法:......
  • IPC-System V-进程间通信概念
    基础概念IPC函数接口IPC对象删除和可持久性信号量SystemV的信号量集表示的是一个或多个信号量的集合。内核为每个信号量集维护一个semid_ds数据结构,而信号量集中的每个信号量使用一个无名结构体表示。信号量比较特殊,首先它是个计数器,主要提供对进程间共享资源......
  • Java中的HTTPS通信
    在Java中实现HTTPS通信,主要涉及到SSL/TLS协议的使用,用于提供数据传输的安全性。下面我们将深入探讨如何使用Java进行HTTPS通信。一、基本概念HTTPS,全称为HypertextTransferProtocolSecure,是HTTP的安全版本。它使用SSL/TLS协议对传输的数据进行加密,确保数据在传输过程中的安全。......