React父子传递参数的三种方式

一、父组件传子组件

父传子比较简单,直接在父组件定义传值名称和值,子组件通过props来接收即可

父组件:

constructor(props){
    super(props)
    this.state={
      message:"I am from parent"
    }
  }
  render(){
    return(
          <Child txt={this.state.message}/>
    )
  }
}

子组件:

render(){
    return(
          <p>{this.props.txt}</p>
    )
  }

二、重点讲解父组件如何接收子组件数据

1、通过传递一个函数来接收

import React from "react";
import ReactDOM from "react-dom";

// 父组件
class Parent extends React.Component {
  constructor(props) {
    super(props);
    this.Foo = this.Foo.bind(this);
    this.state = {
      name: "lzq"
    };
  }
  Foo(data) {
    this.setState({
      name: data
    });
  }
  render() {
    return (
      <div>
        <div>{this.state.name}</div>
        <Son data={this.Foo}/>
      </div>
    );
  }
}

// 子组件
class Son extends React.Component {
  handleClick = () => {
    this.props.data("改变父组件的值");
  };
  render() {
    return <button onClick={this.handleClick}>change parent</button>;
  }
}
ReactDOM.render(<Parent />, document.getElementById("root"));

2、如果子组件是表单,可以使用表单域

父组件:

export default class Category extends Component {
	updateCategory = () => {
		// 对子表单进行验证
	    this.child.validateFields()
	    .then(async values => {
			// vaules是子表单的数据
			
	      // 重置子组件表单数据
	      this.child.resetFields()
	    
	    .catch(errorInfo => {
	      message.error('分类不能为空!')
	    });
	
	    
	}
	render() {
		return (
			<Button onClick={this.updateCategory }>更新分类</Button>
			<UpdateForm  onRef={(ref) => { this.child = ref }}/>
		)
	}
}

子组件:

export default class UpdateForm extends Component {
  /**
   * 1、创建表单域
   */
  formRef = React.createRef()

  componentDidMount() {
    // 2、传值给父组件
  this.props.onRef(this.formRef.current)
  }

  render() {
    return (
      <Form 
        ref={this.formRef}  // 3、定义表单ref
      >
        <Form.Item
          name="name"
          rules={[  
            {
              required: true,
              message: '分类名称必须输入'
            },
          ]}
        >
          <Input />
        </Form.Item>
      </Form>
    )
  }
}

3、通过ref访问

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.myRef = React.createRef();
  }
  getChildDate = () => {
  	const node = this.myRef.current
  }
  render() {
    return (
    	<Button onClick={this.getChildDate}>获取子组件数据</Button>	
    	<Child ref={this.myRef} />
    )
  }
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值