代码之家  ›  专栏  ›  技术社区  ›  Masoud92m

如何处理父组件中的子组件onclick

  •  -2
  • Masoud92m  · 技术社区  · 6 年前

    我的应用程序组件如下:

    class App extends Component {
      clickHandler = () => {
        console.log('click');
      }
      render() {
        return (
          <div className="App">
            <div onClick={this.clickHandler}>Test1</div>
            <Person onClick={this.clickHandler}>Test2</Person>
          </div>
    
        );
      }
    }
    

    这是我的个人组成部分:

    class Person extends Component {
        render() {
            return (
                <div>{this.props.children}</div>
            )
        }
    }
    

    当我点击 Test1 on click工作并显示click-on-console,但当我单击 Test2 onclick不起作用。 如何处理父组件中的onclick?我不想将onclick传递给子组件。

    4 回复  |  直到 6 年前
        1
  •  1
  •   Yossi    6 年前

    这应该有效。你为什么不想这样写?你把它当作道具传递…

    <div onClick={props.onClick}>Test</div>
    
        2
  •  0
  •   AbhaY    6 年前
    class Person extends Component {
        render() {
            return (
                <div onClick={this.propes.onClick}>{this.props.children}</div>
            )
        }
    }
    
        3
  •  0
  •   onejeet    6 年前

    这是完整的解决方案… 结帐: https://codesandbox.io/s/vjp200rj3

    在应用程序中修改了呈现函数。

    render() {
        return (
          <div className="App">
            <div onClick={this.clickHandler}>Test1</div>
            <Person clickHandler={this.clickHandler}>Test2</Person>
          </div>
        );
      }
    

    亲自修改的呈现函数:

      render() {
        return <div onClick={this.props.clickHandler}>{this.props.children}</div>;
      }
    
        4
  •  0
  •   Dan    6 年前

    你需要通过 onClick <div> 在里面 Person .

    点击 不是一个特殊的道具,在反应中无处不在-唯一的内在道具是 key children . 其他一切都需要手动连接。

    你的代码不起作用的原因是你通过了 点击 但对 组件, 点击 只是另一个道具。它本身不做任何事情,直到您将它传递给一个理解处理单击事件意味着什么的组件(React中的所有内置组件都会这样做)。