React 子传父-带参

<Senior
    calculate={(name,value)=>{this.calculate(name,value);}}
/>//前边的calculate是子的,后边的calculate(name,value)是父的,父的方法可以是别的名字
calculate(name,value) {
    console.log('look1', name, value);
}

子触发点击事件后,把值通过calculate()方法传给父

  onItemClick(status){
    const {calculate} = this.props;
    let command = status?'false':'true';
    calculate('onOffStatus',command);
  }  

1. 子的render触发一次,calculate('onOffStatus',command);也执行一次
2. 父的calculate(name,value)方法中调用调用this.setState()方法

两种情况同时存在,则会形成死循环。报如下错误:

Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.

因为

父的this.setState()方法会触发其render方法,继而走子的render方法,子执行calculate('onOffStatus',command)方法,给父传值,父再次setState...死循环。

如何避免

1、2不同时成立即可,如
子中的calculate('onOffStatus',command);不随render的触发而执行,让calculate('onOffStatus',command);有自己的触发事件,如点击事件等
或 父中得到子传来的值,不调用setState方法,这样就不会触发父的render方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Hooks 是 React 16.8 版本引入的一个特性,它可以让你在无需编写类组件的情况下使用状态和其他 React 特性。在 React 中,数据是自上而下流动的,也就是父组件可以通过 props 将数据传递给子组件。但是,如果子组件需要将数据传递给父组件,就需要使用回调函数来实现。 下面是一个示例,展示了如何在 React Hooks 中实现子组件向父组件传递数据: ```jsx import React, { useState } from 'react'; function ParentComponent() { const [dataFromChild, setDataFromChild] = useState(''); const handleDataFromChild = (data) => { setDataFromChild(data); }; return ( <div> <ChildComponent sendDataToParent={handleDataFromChild} /> <p>Data from child: {dataFromChild}</p> </div> ); } function ChildComponent({ sendDataToParent }) { const handleClick = () => { const data = 'Hello from child!'; sendDataToParent(data); }; return ( <button onClick={handleClick}>Send data to parent</button> ); } ``` 在上面的例子中,ParentComponent 是父组件,ChildComponent 是子组件。父组件中有一个状态变量 `dataFromChild`,并通过 `setDataFromChild` 函数来更新它。父组件将 `handleDataFromChild` 函数通过 props 传递给子组件。 子组件中有一个按钮,当点击按钮时,会调用 `handleClick` 函数,并将数据 `'Hello from child!'` 通过 `sendDataToParent` 回调函数传递给父组件。 这样,子组件就可以将数据传递给父组件了。父组件接收到子组件传递的数据后,可以在界面上展示或做其他处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值