gpt4 book ai didi

javascript - 如何从 event.target 获取 react 元素

转载 作者:行者123 更新时间:2023-12-03 01:13:08 40 4
gpt4 key购买 nike

我已将一个事件监听器附加到父元素以监听非合成事件,我想知道是否有一种很好的方法来获取对触发事件以使用其属性的组件的引用

我需要推迟 item.component 的渲染,直到 nonSyntheticEvent 发生

const items = [
{
name: "click me",
component: function First() {
return <strong>asd</strong>;
}
},
{
name: "click me 2",
component: function Second() {
return <b>oasd</b>;
}
}
];

class Component extends React.Component {
componentDidMount() {
this.el.addEventListener("nonSyntheticEvent", event =>
this.nonSyntheticEventHandler(event)
);
}

nonSyntheticEventHandler(event) {

// how to get reference to item
// from event.target to render it's item.component

const el = React.createElement(item.component);
ReactDOM.render(el, event.target);
}

render() {
return (
<div ref={ref => { this.el = ref; }}>
{this.props.items.map(item => <Child {...item} />)}
</div>
);
}
}

<Component items={items} />

最佳答案

在 React 16.3 中引入了 React.createRef() ,它可以在 Component 中使用,在渲染 Child 组件之前创建引用。

例如,在Component.constructor中,可以在状态中创建对每个子级的引用

this.state = {
items: items.map(item => ({
...item,
reference: React.createRef()
}))
};

然后在Child组件中可以使用from props:

function Child(props){
return (
<div ref={props.reference}>
<span>{props.name}</span>
</div>
);
}

然后在 nonSyntheticEventHandler 中可以像这样获取该项目:

const found = this.state.items.find(item => {
return item.reference.current === event.target;
});

Codesandbox.io 中的工作示例

关于javascript - 如何从 event.target 获取 react 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52134699/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com