【前端开发】React 中父子组件之间的通信方式

素颜马尾好姑娘i 2022-09-09 06:08 231阅读 0赞

文章目录

  • 一. 父组件传递子组件
      1. 子组件是class组件
      1. 子组件是function组件
  • 二. 子组件传递父组件

一. 父组件传递子组件

在react中父组件传递子组件中,主要的实现方式:

  • 父组件通过 属性=值 的形式来传递给子组件数据;
  • 子组件通过 props 参数获取父组件传递过来的数据;

而子组件又有class子组件和function子组件,首先是class子组件:

1. 子组件是class组件

  1. import React, {
  2. Component } from 'react';
  3. // 1.class类子组件
  4. class ChildClass extends Component {
  5. constructor(props) {
  6. super(props);
  7. }
  8. render() {
  9. const {
  10. name, password} = this.props;
  11. return (
  12. <div>
  13. <h2>我是class子组件</h2>
  14. <p>展示父组件传递过来的数据: {
  15. name + " " + password}</p>
  16. </div>
  17. )
  18. }
  19. }
  20. // 父组件
  21. export default class App extends Component {
  22. render() {
  23. return (
  24. <div>
  25. <ChildClass name="admin" password="123456" />
  26. </div>
  27. )
  28. }
  29. }

在这里插入图片描述
class组件需要实现构造器,并调用super(props),传入的props会被Component设置到this中(即父类的对象),这样子类就可以继承过来,从而实现组件通信;

在这里插入图片描述

1. 子组件是function组件

  1. // 1.class类子组件
  2. class ChildClass extends PureComponent {
  3. constructor(props) {
  4. super(props);
  5. }
  6. render() {
  7. const {
  8. name, password} = this.props;
  9. return (
  10. <div>
  11. <h2>我是class子组件</h2>
  12. <p>这里是父组件传递过来的数据: {
  13. name + " " + password}</p>
  14. </div>
  15. )
  16. }
  17. }
  18. // 2. function子组件
  19. function ChildFunc(props) {
  20. const {
  21. name, password} = props;
  22. return (
  23. <div>
  24. <h2>我是function子组件</h2>
  25. <p>这里是父组件传递过来的数据: {
  26. name + " " + password}</p>
  27. </div>
  28. )
  29. }
  30. export default class App extends PureComponent {
  31. render() {
  32. return (
  33. <div>
  34. <ChildClass name="admin" password="123456" />
  35. <ChildFunc name="admin" password="123456" />
  36. </div>
  37. )
  38. }
  39. }

在这里插入图片描述

在这里插入图片描述
functional组件相对来说比较简单,不需要有构造方法,也不需要有this的问题。

二. 子组件传递父组件

有父组件向子组件传递,那么也有子组件向父组件传递的情况,在React中子组件传递父组件是通过props传递消息,让父组件给子组件传递一个回调函数,然后在子组件中调用这个函数即可:

  1. import React, {
  2. PureComponent } from 'react';
  3. function CounterButton(props) {
  4. const {
  5. operator, btnClick } = props;
  6. return <button onClick={
  7. btnClick}>{
  8. operator}</button>
  9. }
  10. // 父组件
  11. export default class App extends PureComponent {
  12. constructor(props) {
  13. super(props);
  14. this.state = {
  15. counter: 0
  16. }
  17. }
  18. changeCounter(count) {
  19. this.setState({
  20. counter: this.state.counter + count
  21. })
  22. }
  23. render() {
  24. return (
  25. <div>
  26. <h2>当前计数: {
  27. this.state.counter}</h2>
  28. <CounterButton operator="+1" btnClick={
  29. e => this.changeCounter(1)} />
  30. <CounterButton operator="-1" btnClick={
  31. e => this.changeCounter(-1)} />
  32. </div>
  33. )
  34. }
  35. }

在这里插入图片描述
index.js:

  1. import React from "react";
  2. import ReactDOM from 'react-dom';
  3. //import App from './App'
  4. import App from './App'
  5. // import "antd/dist/antd.css";
  6. ReactDOM.render(<App/>, document.getElementById("root"));

发表评论

表情:
评论列表 (有 0 条评论,231人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue父子组件之间通信

    在vue组件通信中其中最常见通信方式就是父子组件之中的通性,而父子组件的设定方式在不同情况下又各有不同。最常见的就是父组件为控制组件子组件为视图组件。父组件传递数据给子组件使用