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

将单击处理程序传递给子级 - Reactjs

将单击处理程序传递给子级 - Reactjs

qq_笑_17 2021-11-12 15:30:55
我想将一个 onClick 事件从我的父级反应组件传递给子级,但我尝试了几种不同的方法,但所有这些都会导致“空”参数。 // parent removeImage(event, item, params){     console.log('deleted', item, params)     event.stopPropagation();   } render() {    const props = this.props;    const params = props.match.params;    const item = props.item;    const images = props.images;    var i = images.map(image => {      return <ImageComponent remove={(e) => this.removeImage(e, item, params)}/>  })    return (     <div>        {i}    </div>    );// child   internalRemove = event => {    this.props.remove(event);  }    <i className="fas fa-trash remove" onClick={this.internalRemove} />
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

我认为更有意义的是将item和params作为道具实际传递给ImageComponent. 然后通过孩子使用这些道具。


 // parent

 removeImage(event, item, params){


     console.log('deleted', item, params)

     event.stopPropagation();

   }



 render() {

    const props = this.props;

    const params = props.match.params;

    const item = props.item;

    const images = props.images;

    var i = images.map(image => {

      return <ImageComponent remove={this.removeImage} params={params} item={item}/>

  })



// child 

  internalRemove = event => {

    this.props.remove(event, this.props.item, this.props.params);

  }

    <i className="fas fa-trash remove" onClick={this.internalRemove} />

假设孩子是一个类组件,那应该可以工作。


查看完整回答
反对 回复 2021-11-12
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

只需尝试将remove道具直接传递给子 onClick 事件:


class ImageComponent extends React.Component {

  render() {

    return (

      <button className="square" onClick={this.props.remove}>

        Click me

      </button>

    );

  }

}


class Parent extends React.Component {

 removeItem (event, someValue) {   

  console.log('deleted', someValue)

  console.log(event.target)     

 }

 render() {

 const {props} = this

 const test = props.customProps

  var i = [1,2].map(image => {

   return <ImageComponent remove={(e) => this.removeItem(e, test)}/>

  })   

  return (

   <div>

    {i}

   </div>

  );

 }

}


class GrandParent extends React.Component {

  render() {

    return (

     <Parent customProps={'test'} />

    );

  }

}


ReactDOM.render(

  <GrandParent />,

  document.getElementById('react')

);

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

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

<div id='react'></div>


查看完整回答
反对 回复 2021-11-12
  • 2 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号