为了账号安全,请及时绑定邮箱和手机立即绑定

无法在反应中调用子组件的方法

无法在反应中调用子组件的方法

幕布斯7119047 2022-06-09 16:35:05
我有以下组件。该组件接受可以调用的函数的道具。deleteIcon = () => { console.log("deleting the document");}    export const Parent = (props) => {      return (         <button onclick={() => {deleteIcon()}}      )    }现在,我有一些使用该组件的另一个组件。它有自己的 deleteIcon 方法实现。deletechildIcon = () => {}export const child = () => {     return (   <Parent deleteIcon={() => {deletechildIcon()}} /> )}所以,从孩子仍然是调用父方法而不是子方法。谁能帮我这个 ?
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

听起来您想要一个可以在特定实现中选择性覆盖Parent的默认道具。deleteIcon你可以通过这样的编辑来做到这Parent一点:


deleteIcon = () => {

 console.log("deleting the document");

}


export const Parent = (props) => {

  const buttonOnClickHandler = props.deleteIcon || deleteIcon;

  return (

    <button onClick={() => {buttonOnClickHandler()}}

  )

}

或者您可以使用默认参数:


deleteIconDefault = () => {

 console.log("deleting the document");

}


export const Parent = ({

  deleteIcon = deleteIconDefault

}) => {;

  return (

      <button onClick={() => {this.props.deleteIcon()}}

  )

}

希望这会为您指明正确的方向!


查看完整回答
反对 回复 2022-06-09
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

您正在调用 Parent 组件中的 deleteIcon 方法,而不是 props.deleteIcon



查看完整回答
反对 回复 2022-06-09
?
白板的微信

TA贡献1883条经验 获得超3个赞

一些注意点:

  • onClick而不是onclick

  • 不需要在 props 中使用箭头函数,这可能会导致性能损失,这不是最佳实践

  • 在组件中编写函数

  • Child组件是在内部调用的组件Parent,您将其设置为相反的


尝试文本演示:

const Parent = () => {

  const deleteIcon = () => {

    console.log("deleting the document");

  };

  return <Child deleteIcon={deleteIcon} />;

};


const Child = props => {

  return <button onClick={props.deleteIcon}>XXX</button>;

};


ReactDOM.render(<Parent />, document.getElementById("root"));

<div id="root"></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.12.0/umd/react.production.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.12.0/umd/react-dom.production.min.js"></script>



查看完整回答
反对 回复 2022-06-09
  • 3 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信