程序员鸡皮
文章 分类 评论
114 3 31

站点介绍

一名PHP全栈程序员的日常......

React中子组件如何向父组件发送数据?

abzzp 2025-03-22 269 0条评论 前端 React

首页 / 正文
本站是作为记录一名北漂程序员编程学习以及日常的博客,欢迎添加微信BmzhbjzhB咨询交流......

发布于2024-07-04

组件通信之子传父

子组件向父组件发送数据

下面我们先看一个例子:

import React,{Component} from "react";
import AddCounter from "./AddCount";
import SubCounter from "./SubCounter";

export class App extends Component{
    constructor(){
        super()
        this.state = {
            counter:100
        }
    }
    
    changeCounter(count){
        this.setState({counter:this.state.counter + count})
    }
    
    render(){
        const { counter } = this.state
        
        return (
            <div>
                <h2>当前计数:{counter}</h2>
                <AddCounter addClick={(count)=>this.changeCounter(count)}></AddCounter>
                <SubCounter subClick={(count)=>this.changeCounter(count)}></SubCounter>
            </div>
        )
    }
}

export default App 

上面代码中,实现了一个简易版的计数器,我们定义了两个子组件,分别用于增加和减少计数器,然后通过props将方法传递给子组件,子组件通过调用父组件传递过来的方法来改变父组件的状态。changeCounter方法中,我们通过this.setState来改变父组件的状态。

AddCounter组件(增加计数器)

我们先来看AddCounter组件,代码如下:

import React,{Component} from "react";
import PropTypes from  "prop-types"

export class AddCounter extends Component{
    addCount(count){
        this.props.addClick(count)
    }
    
    render(){
        return (
            <div>
                <button onClick={e => this.addCount(1)}>+1</button>
                <button onClick={e => this.addCount(5)}>+5</button>
                <button onClick={e => this.addCount(10)}>+10</button>
            </div>
        )
    }
}

AddCounter.propTypes = {
    addClick:PropTypes.func
}

export default AddCounter

这里我们注意,这个组件中的类型限定,我们通过PropTypes来限定addClick这个方法必须是一个函数PropTypes.func。然后接着我们会通过this.props.addClick(count)来调用父组件传递过来的方法来改变状态。this.props是父组件传递过来的属性(这点和vue中的props类似)。然后我们在render函数中通过this.addCount(1)来调用我们定义的方法,该方法又会去调用父组件传递过来的方法。 这里为什么要用e => this.addCount(1)箭头函数呢?因为箭头函数不会改变this的指向,如果不用箭头函数,那么this.addCount(1)中的this指向的是AddCounter,而不是App

SubCounter组件(减少计数器)

我们再来看SubCounter组件,代码如下:

import React,{Component} from "react";

export class SubCounter extends Component{
    subCount(count){
        this.props.subClick(count)
    }
    
    render(){
        return (
            <div>
                <button onClick={e => this.subCount(-1)}>-1</button>
                <button onClick={e => this.subCount(-5)}>-5</button>
                <button onClick={e => this.subCount(-10)}>-10</button>
            </div>
        )
    }
}

export default SubCounter

这里我们也通过this.props.subClick(count)来调用父组件传递过来的方法来改变状态。就不再过多赘述了。请看AddCounter组件中的内容。

总结

通过上面的例子,我们可以看出,子组件向父组件发送数据的方法是通过props来传递的。然后父组件通过props来接收子组件传递过来的数据,然后通过props来调用父组件传递过来的方法来改变父组件的状态。这样就实现了子组件向父组件发送数据的目的。最后附上生成的效果图:

React中子组件如何向父组件发送数据

感谢大家观看,我们下次见

评论(0)

最新评论

  • 城市教堂

    我热爱 旅游专栏。令人惊艳了解路线。

  • 湖山風光

    欣赏你的照片, 我明白, 世界很美。感谢 旅行灵感。

  • 古競技場

    读起来像小说。继续保持 带来的灵感。

  • 奧運聖火

    让人精神焕发的 帖子! 我准备订票了。

  • abzzp

    以后焦虑了或者迷茫了记得回来看看[[流泪]]

  • 三十三瀑布

    我非常喜欢 出行博客。鼓舞人心查看路线。

  • 天星碼頭

    你们的博客 百分百 帮助选择路线。坚持!

  • 日落鼓掌

    信息丰富的 出行资源! 越来越棒!

  • digital banking

    My brother suggested I might like this blog. He was entirely right. This post actually made my day. You cann't imagine just how much time I had spent for this information! Thanks!

  • 碧海藍灣

    我热爱, 写得很实在。你的博客 就是 最好的例子。很出色。

日历

2026年02月

1234567
891011121314
15161718192021
22232425262728

文章目录

站点公告
本站是作为记录一名北漂程序员编程学习以及日常的博客,欢迎添加微信BmzhbjzhB咨询交流......
点击小铃铛关闭
配色方案