我有一个输入组件,它接受一个元素并呈现它。 它是一个div,包含一个标签和一个输入。
我的老板问我,当我点击div中的任何地方时,它会关注输入(所以如果是下拉列表,它会打开下拉列表,输入,我们可以开始写文本,等等)。
我曾考虑使用refs来实现:当用户单击div时,onClick元素将被三角化,输入将获得焦点。
但是,所有输入都在this.props.children
中。 我如何在输入上放一个ref并在代码中使用它? 下面是它的样子:
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { Tooltip } from '@material-ui/core';
export class Input extends Component {
displayTitle () {
if (this.props.tip) {
return (
<label htmlFor={this.props.name} className="lone-input-container-title">
{this.props.title}<Tooltip placement="top" arrow title={this.props.tip}><span className="shadow-md p-1 text-hardbacon rounded-full px-2 cursor-pointer ml-2">?</span></Tooltip>
</label>);
}
return (
<label htmlFor={this.props.name} className="lone-input-container-title">
{this.props.title}
</label>
);
}
render () {
return (
<div className="lone-input-container">
{this.displayTitle()}
<div>
{React.cloneElement(this.props.children[0])}
</div>
</div>
);
}
}
Input.propTypes = {
name: PropTypes.string,
title: PropTypes.string.isRequired,
children: PropTypes.node.isRequired,
tip: PropTypes.string
};
export default Input;
我不打算全盘回答。 只是想帮你一把。 这是我的另一个帖子,可以帮助你参考。
要在克隆元素中使用ref,可以执行如下操作:
{React.cloneElement(this.props.children[0], {ref: this.refElement})}