关于React的父子通信

本文详细介绍了在React中,父组件如何通过props将state传递给子组件,以及子组件如何通过调用父组件的方法实现向父组件的值传递。

一、 父值组件向子组件传
父组件向子组件传值,通过`props`,将父组件的`state`传递给了子组件。

父组件代码:

import React, { Component } from "react";
import Child from './Child'  //引入子组件
 
export class App extends Component {
//定义数据
  state = {
    txt: '狒狒',
  }
  render () {
    return <div>
    //渲染子组件,并向子组件传递txt属性
      <Child txt={this.state.txt} ></Child>  
    </div>;
  }
}
 
export default App;
子组件代码:  
创建一个Child.jsx

import React, { Component } from 'react'
 
export class Child extends Component {
// 使用props属性接收父组件传递过来的参数
  constructor (props) {
    super(props)
  }
 
  render () {
    return (
      <div>
      // 渲染,props从父组件接收过来的参数
        {this.props.txt}
      </div>
    )
  }
}
 
export default Child
二、 子组件向父组件传值
子组件通过调用父组件传递到子组件的方法可以将子组件的属性传递到父组件。

子组件代码:

import React, { Component } from 'react'
 
export class Child extends Component {
  constructor (props) {
    super(props)
  }
 
//定义数据
  state = {
    msg: '狒狒2'
  }
 
//点击事件
  getChild = () => {
    this.props.getChild(this.state.msg)
  }
 
  render () {
    return (
      <div>
        <button onClick={this.getChild}>子往父传值</button>
      </div>
    )
  }
}
 
export default Child
父组件代码:

import React, { Component } from "react";
import Child from './Child'  //引入子组件
 
export class App extends Component {
 
state = {
    msg: ''
  }
 
//用于接收子组件的传值方法,参数为子组件传递过来的值
getChildFn = (e) => {
    console.log(e);
    this.setState({
    //把子组件传递过来的值赋给this.state中的属性
      msg: e
    })
  }
 
  render () {
    return <div>
    //1.  渲染子组件,设置子组件访问的方法,getChild属性名为子组件中调用的父组件方法名
      <Child getChild={this.getChildFn}></Child>
       {this.state.msg}
    </div>;
  }
}
 
export default App;
这是我对React父子通信的理解,感谢大家的阅读,如果其中有错误,希望大家指出
 

### React父子组件通信方法 React 提供了多种机制来支持父子组件之间的数据传递和交互。以下是详细的说明: #### 1. **父组件向子组件传递数据** 父组件可以利用 `props` 将任意类型的数据(如字符串、数字、对象、函数等)传递到子组件中。这种单向数据流的设计使得状态管理更加清晰可控。 ```javascript import React from 'react'; const ChildComponent = ({ message }) => { return <h1>{message}</h1>; }; const ParentComponent = () => { return <ChildComponent message="Hello from Parent!" />; }; export default ParentComponent; ``` 在这个例子中,父组件通过 `props.message` 向子组件传递了一个字符串消息[^1]。 --- #### 2. **子组件向父组件传递数据** 当需要从子组件向父组件传递数据时,通常采用回调函数的方式。具体来说,父组件会定义一个处理逻辑的函数,并将其作为 `prop` 传递给子组件。子组件可以在适当的时候调用这个函数并将所需数据作为参数传回给父组件。 ##### 函数式组件示例: ```javascript import React, { useState } from 'react'; // 子组件 function ChildComponent({ onSendData }) { const handleClick = () => { const dataToParent = "This is a message from child"; onSendData(dataToParent); }; return ( <button onClick={handleClick}>Send Data to Parent</button> ); } // 父组件 function ParentComponent() { const [receivedMessage, setReceivedMessage] = useState(""); const handleReceiveData = (dataFromChild) => { setReceivedMessage(dataFromChild); }; return ( <div> <h1>Parent Component</h1> <p>Message Received: {receivedMessage}</p> <ChildComponent onSendData={handleReceiveData} /> </div> ); } export default ParentComponent; ``` 在此代码片段中,父组件定义了 `handleReceiveData` 方法并通过 `onSendData` 属性传递给了子组件。当按钮被点击时,子组件调用了该方法并向父组件发送了一条消息[^4]。 --- #### 3. **父组件调用子组件的方法** 如果父组件需要直接访问子组件内部的状态或方法,则可以通过 `ref` 来实现这一点。然而需要注意的是,这种方式应谨慎使用,因为它可能破坏组件封装性原则。 ##### 类组件示例: ```javascript import React from 'react'; import ChildComponent from './ChildComponent'; class ParentComponent extends React.Component { constructor(props) { super(props); this.childRef = React.createRef(); } callChildMethod = () => { if (this.childRef.current && typeof this.childRef.current.childrenMethod === 'function') { this.childRef.current.childrenMethod(); } }; render() { return ( <div> <button onClick={this.callChildMethod}>Call Child Method</button> <ChildComponent ref={this.childRef} /> </div> ); } } export default ParentComponent; ``` 这里展示了如何借助 `React.createRef()` 创建引用实例,并通过它触发子组件内的公开方法[^3]。 --- #### 4. **双向绑定模拟** 虽然 React 不推荐传统的双向绑定模式,但我们仍然可以用组合的方式来达到类似效果——即让某个输入框既显示初始值又允许用户更改其内容的同时通知上级组件更新全局状态。 ```javascript import React, { useState } from 'react'; function InputField({ value, onChange }) { return <input type="text" value={value} onChange={(e) => onChange(e.target.value)} />; } function App() { const [textInput, setTextInput] = useState('Initial Value'); return ( <> <InputField value={textInput} onChange={setTextInput} /> <p>You typed: {textInput}</p> </> ); } ``` 此案例里,每当 `<input>` 的值发生变化时都会同步告知外部容器重新渲染界面[^5]。 --- ### 总结 综上所述,React 支持丰富的父子组件间通讯手段,主要包括但不限于基于 Props 的单项数据流动、事件驱动架构下的回调注册/执行流程设计以及特殊场景下运用 Refs 手动干预操作等等技术要点。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值