javascript - 没有ref的 react 组件的目标dom元素

标签 javascript reactjs

我在我的项目中安装了一个名为 react-geosuggest 的 react-component。我需要找到 <label> <Geosuggest> 中的 dom 元素组件并插入一个 onClick处理程序到 <label> .有没有办法针对 <label>标记而不改变 <Geosuggest>组件的代码。

这是 JSX

render() {
return (
<div>
  <Geosuggest
    id = "searchbar"
    label = " "
    placeholder = ""
    initialValue = {this.state.location}
    onChange = {this.onInputChange}
    onSuggestSelect = {this.onSelection}
    onClick = {this.toggleSearch}
    className = {this.state.expand}
    inputClassName = {this.state.expand}
    // Name a calling reference
    ref = 'geosuggest_component'
  />
</div>
);

这是 HTML 输出

<div class="geosuggest">
<div class="geosuggest__input-wrapper">
<label for="searchbar"></label>
<input class="geosuggest__input" type="text" id="searchbar">
</div>
</div>

最佳答案

你必须使用 vanillajs。在您的组件中,您可以在 componentDidMount 中访问 geosuggest_component ref:

componentDidMount() {
    // findDOMNode returns an HTMLElement
    const node = ReactDOM.findDOMNode(this.refs.geosuggest_component);
    // Then search the label
    const label = node.querySelector('label');
    // Now, you can do anything you want with label
    label.addEventListener('click', () => console.log('clicked'))   
}

我使用 ReactDOM.findDOMNode,因为在这种情况下,this.refs.geosuggest_component 返回一个 React 组件。 findDOMNode 方法将为您提供所需的 HTMLElement。

但是,声明 ref 的更好方法是使用回调:

ref={node => this.geosuggest_component = node}

现在在 componentDidMount 中:

const node = ReactDOM.findDOMNode(this.geosuggest_component);

关于javascript - 没有ref的 react 组件的目标dom元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40560846/

相关文章:

javascript - 为什么总是呈现星号路线?

javascript - 我应该在 React.js 函数组件中哪里进行 AJAX 和 API 调用?

javascript - 找不到模块 'react/jsx-runtime' 的声明文件

javascript - react : Expected an assignment or function call and instead saw an expression in JSX

javascript - 我正在尝试制作一个使用自定义键盘快捷键的 Google 文档插件

javascript - "toLocaleString"在不同的浏览器上给出不同的输出

javascript - 在javascript中转换为gmt日期的函数

javascript - 数组数组或使用相同变量返回不同值的其他解决方案?

javascript - 如何在 Angular 过滤器中使用变量

javascript - React Router v5 附带代码拆分和使用服务器端渲染的数据预取