用React聚焦div元素

是否可以使用focus()方法聚焦div(或任何其他元素)

我已将tabIndex设置为div元素:

<div ref=“dropdown”tabIndex=“1”&gt&lt/部门>

我可以看到,当我点击它时,它会被聚焦,但是,我尝试动态聚焦元素,如下所示:

设置活动(状态){
ReactDOM.findDOMNode(this.refs.dropdown).focus();
}

或者像这样:

this.refs.dropdown.focus();

但是当事件被触发时,组件不会获得焦点。我该怎么做?是否有其他(非输入)元素可用于此

编辑:

嗯,看起来这实际上是可以做到的:https://jsfiddle.net/69z2wepo/54201/

但它对我不起作用,这是我的全部代码:

类颜色选择器扩展React.Component{
建造师(道具){
超级(道具);
此.state={
活动:错误,
值:“”
};
}
选择项目(颜色){
this.setState({value:color,active:false});
}
设置活动(状态){
this.setState({active:state});
this.refs.dropdown.focus();
}
render(){
const{colors,styles,inputName}=this.props;
const pickerClasses=classNames(’colorpicker-dropdown’,{‘active’:this.state.active});
const colorFields=colors.map((颜色,索引)=&gt{
const colorClasses=classNames(’colorpicker-item’,[`colorpicker-item-${color}`]);
返回(
<div onClick={()=>{this.selectItem(color)}}key={index}className=“colorpicker项目容器”>
<div className={colorClasses}></div>
</div>
);
});
返回(
<div className=“colorpicker”>
<input type=“text”className={styles}name={inputName}ref=“component”value={this.state.value}onFocus={()=>{this.setActive(true)}/>
<div onBlur={()=>this.setActive(false)}onFocus={()=>console.log(’focus’)}tabIndex=“1”ref=“dropdown”className={pickerClasses}>
{colorFields}
</div>
</div>
);
}
}

每次设置状态时,React都会重新绘制组件,这意味着组件会失去焦点。在这种情况下,如果希望基于prop或state元素聚焦元素,则可以方便地使用componentdiddupdatecomponentDidMount方法

请记住,根据React Lifecycle文档,componentDidMount仅在第一次在屏幕上呈现组件后才会发生,并且在此调用中,componentDidUpdate不会发生,然后对于每个新的setStateforceUpdate调用或接收新道具的组件将执行componentdiddupdate调用

componentDidMount(){
这是focusDiv();
},
componentDidUpdate(){
if(this.state.active)
这是focusDiv();
},
focusDiv(){
ReactDOM.findDOMNode(this.refs.theDiv.focus();
}

这是一把JS小提琴,你可以在上面玩

发表评论