11 React 组件通信 父传子

在React中实现组件通信是非常常见的需求,其中包括父子组件通信。以下是几种常见的父子组件通信的例子,以及需要注意的知识:

  1. Props传递

    这是最基本的父子组件通信方式。父组件通过props将数据传递给子组件。

    js 复制代码
    // ParentComponent.js
    import React from 'react';
    import ChildComponent from './ChildComponent';
    
    function ParentComponent() {
        const data = "Hello from Parent";
        return <ChildComponent data={data} />;
    }
    
    // ChildComponent.js
    import React from 'react';
    
    function ChildComponent(props) {
        return <div>{props.data}</div>;
    }

    注意事项:

    • Props是只读的,子组件不能直接修改props,只能由父组件传递。
    • 父组件通过props将数据传递给子组件,子组件通过props接收数据。
  2. 回调函数传递

    父组件通过props将回调函数传递给子组件,子组件调用该函数来与父组件通信。

    js 复制代码
    // ParentComponent.js
    import React, { useState } from 'react';
    import ChildComponent from './ChildComponent';
    
    function ParentComponent() {
        const [message, setMessage] = useState("");
    
        const handleMessage = (msg) => {
            setMessage(msg);
        };
    
        return (
            <div>
                <ChildComponent handleMessage={handleMessage} />
                <p>Message from Child: {message}</p>
            </div>
        );
    }
    
    // ChildComponent.js
    import React from 'react';
    
    function ChildComponent(props) {
        const handleClick = () => {
            props.handleMessage("Hello from Child");
        };
    
        return <button onClick={handleClick}>Send Message</button>;
    }

    注意事项:

    • 父组件通过回调函数的形式将能够修改父组件状态的方法传递给子组件。
    • 子组件调用该回调函数来通知父组件发生了某些事件或状态变化。
  3. Context API

    React的Context API允许您在组件树中传递数据,而无需在每个层级手动传递props。

    js 复制代码
    // MyContext.js
    import React from 'react';
    
    const MyContext = React.createContext();
    
    export default MyContext;
    
    // ParentComponent.js
    import React from 'react';
    import ChildComponent from './ChildComponent';
    import MyContext from './MyContext';
    
    function ParentComponent() {
        return (
            <MyContext.Provider value="Hello from Context">
                <ChildComponent />
            </MyContext.Provider>
        );
    }
    
    // ChildComponent.js
    import React, { useContext } from 'react';
    import MyContext from './MyContext';
    
    function ChildComponent() {
        const data = useContext(MyContext);
        return <div>{data}</div>;
    }

    注意事项:

    • Context API适用于在组件树中传递全局数据,但在小型应用中不建议滥用。
    • 可以在整个组件树中访问Context提供的值,而不需要手动将props逐层传递给每个子组件。

在实现组件通信时,需要注意以下几点:

  • 父子组件之间的通信应该保持单向数据流,即父组件向子组件传递数据或回调函数,而不是相反。
  • 避免直接修改props,props应该被视为不可变的。
  • 使用适当的方法传递数据,如Props传递、回调函数、Context API等,根据具体场景选择合适的方式。
  • 尽量将通信逻辑封装在组件内部,使组件更加可重用和独立。
相关推荐
子兮曰15 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰15 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万15 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝15 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋16 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁17 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄17 小时前
JavaScript 隐式全局变量解析
javascript
汉堡大王952718 小时前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大18 小时前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师19 小时前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端