如何将按钮事件连接到另一个 React 组件?

Posted

技术标签:

【中文标题】如何将按钮事件连接到另一个 React 组件?【英文标题】:How to connect a button event to another React component? 【发布时间】:2019-07-05 09:37:07 【问题描述】:

我正在学习 React,我正在尝试制作一个简单的应用程序:您单击一个按钮,它会增加一个计数器。我准备了两个组件,ClickCounterClickButton,但我不确定如何将它们连接在一起。我阅读了不同的教程,但他们希望我的组件是父/子 - 从架构的角度来看,我是否完全缺少某些东西?

class ClickCounter extends React.Component 
  constructor(props) 
    super(props);
    this.state =  count: 0 ;
  
  render() 
    return <h1>this.state.count</h1>;
  


function ClickButton(props) 
  function handleClick(e) 
    e.preventDefault();
    console.log("clicked");
    // increment the ClickCounter..how?
  
  return (
    <button id="btn" onClick=handleClick>Click me</button>
  );



function Container() 
  return (
    <div>
      <ClickCounter />
      <ClickButton />
    </div>
  );


const root = document.getElementById("root");
ReactDOM.render(<Container />, root);

【问题讨论】:

【参考方案1】:

当两个兄弟组件需要共享某些状态时,一种常用的技术是传递给lift the state up to the first common ancestor(在本例中为Container)并将状态和状态更改函数作为道具传递给子组件。

示例

function ClickCounter(props) 
  return <h1>props.count</h1>;


function ClickButton(props) 
  return (
    <button id="btn" onClick=props.handleClick>Click me</button>
  );



class Container extends React.Component 
  state =  count: 0 ;

  onClick = () => 
    this.setState(prevState => 
      return  count: prevState.count + 1 ;
    );
  ;

  render() 
    return (
      <div>
        <ClickCounter count=this.state.count />
        <ClickButton handleClick=this.onClick />
      </div>
    );
  


ReactDOM.render(<Container />, document.getElementById("root"));
<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="root"></div>

【讨论】:

以上是关于如何将按钮事件连接到另一个 React 组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将活动连接到小部件?

我可以等待我的组件连接到 react-redux 吗?

mysql - 如何使用父表中的值将连接表连接到另一个连接表?

Qt 5.7 - QWebEngineView - 将 HTML 按钮单击事件连接到 C++/Qt 插槽

将 React Redux 连接到 Typescript 中的组件

React:从按钮 onclick 传递映射数据以显示在另一个组件上