简体   繁体   English

使用父级中的子事件侦听器进行反应

[英]React utilizing child event listener in parent

I am struggling with wrapping my head around sending information from an onClick event listener in my child component to my parent component. 我正在竭尽全力地将信息从子组件中的onClick事件侦听器发送到父组件。 I am rendering an array of children, and I want each to have an event listener, so that onClick , the name of that child will be set as the "selected" parameter in my parent state. 我正在渲染一个孩子数组,我希望每个孩子都有一个事件侦听器,以便在我的父状态下将该孩子的名称onClick设置为“ selected”参数。

This is my child component. 这是我的孩子部分。

var DropDownLink = React.createClass({
  render: function(){
    var dropDownVisible;
    if (this.props.visible){
      dropDownVisible="dropdownoption"
    } else {
      dropDownVisible="dropdownoption hide"
    }
    return (
      <div onClick={this.props.onClick} className={dropDownVisible}>{this.props.name}</div>
    );
  }
});

And this is my parent component: 这是我的父组件:

var Dropdown = React.createClass({
    getInitialState: function() {
        return {
            listVisible: false,
            selected: this.props.items[0].name,
        };
    },
    show: function() {
        this.setState({ listVisible: true });
        document.addEventListener("click", this.hide);
    },
    hide: function() {
        this.setState({ listVisible: false });
        document.removeEventListener("click", this.hide);
    },
    generateDropDown: function(item) {
        return <DropDownLink name={item.name} visible={this.state.listVisible}/>
    },
    render: function() {
        var items = this.props.items.map(this.generateDropDown);
        var dropdowncontain;
        if (this.state.listVisible) {
            dropdowncontain="dropdowncontainer";
        } else {
            dropdowncontain="dropdowncontainer hide";
        }
        return (
            <span className="roledropdown" onClick={this.show}>
                <span className="roleselected">{this.state.selected}</span>
                <i className="fa fa-caret-down clickdown"></i>
                <div className={dropdowncontain}>{items}</div>
            </span>
        )
    }
});

I believe I have set up the child component correctly based on some examples I saw, however what is confusing me is how I should write the function in the parent that handles each child index, given that I am already mapping the array using my generateDropDown function. 我相信我已经根据一些示例正确设置了子组件,但是令我感到困惑的是,鉴于我已经使用generateDropDown函数映射了数组,我该如何在处理每个子索引的父组件中编写函数。 Ideally, I want to just modify the generateDropDown function, to include this functionality, but I am new to React and struggling to understand how to. 理想情况下,我只想修改generateDropDown函数以包括此功能,但是我对React还是陌生的,并且难以理解如何使用。

Here's an example of what you could change in your Dropdown component. 这是您可以在Dropdown组件中进行更改的示例。 Essentially, pass in a onClick handler to your children with some unique identifier bound to each. 本质上,将onClick处理程序传递给您的孩子,每个孩子绑定一些唯一的标识符。 In this example, it is bound to the item.name because that is in your original code. 在此示例中,它绑定到item.name,因为它在原始代码中。 You could use something else from the item object, though. 不过,您可以使用item对象中的其他内容。

handleChildClick: function(childName, event){
    // One of the DropDownLink components was clicked.
    // Handle that click here.
},

generateDropDown: function(item){
    return <DropDownLink name={item.name} onClick={this.handleChildClick.bind(item.name)} visible={this.state.listVisible}/>
},

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 父子事件监听器 - Parent and child event listener React 中点击子元素调用父事件监听器 - Clicking on a child element calls a parent event listener in React 单击父项的子项时的事件侦听器 - Event listener for when child of parent is clicked 反应:为每个孩子添加一个事件侦听器并将一个引用传递给父母的事件处理程序 - 效率低吗? 事件冒泡可能吗? - React: Adding an event listener to each child and passing down a reference to parent's event handler - is it inefficient? Is event bubbling possible? React:处理子事件中的父事件 - React: Handling the parent event in the child 将事件侦听器添加到其父母已禁用事件的孩子 - Add event listener to child whose parent has event disabled Drop over child 会触发 parent 的“drop”事件侦听器。 我想通过特定于子的“drop”覆盖该事件侦听器 - Dropping over child triggers the “drop” event listener of parent . I want to override that event listener by a Child specific “drop” 当在Javascript中单击子元素时,如何覆盖父事件侦听器? - How to override a parent event listener when a child element is clicked in Javascript? 在AngularJS中加载子侦听器后广播父事件 - Broadcast Parent Event after Child listener loads in AngularJS 子组件发出自定义事件,但未触发父组件的侦听器 - child component emit an custom event, but parent component's listener not triggered
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM