是否可以使用focus()方法聚焦div(或任何其他元素)
我已将tabIndex设置为div元素:
<;div ref=“dropdown”tabIndex=“1”></部门>;
我可以看到,当我点击它时,它会被聚焦,但是,我尝试动态聚焦元素,如下所示:
设置活动(状态){
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((颜色,索引)=>{
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元素聚焦元素,则可以方便地使用componentdiddupdate或componentDidMount方法
请记住,根据React Lifecycle文档,componentDidMount仅在第一次在屏幕上呈现组件后才会发生,并且在此调用中,componentDidUpdate不会发生,然后对于每个新的setState,forceUpdate调用或接收新道具的组件将执行componentdiddupdate调用
componentDidMount(){
这是focusDiv();
},
componentDidUpdate(){
if(this.state.active)
这是focusDiv();
},
focusDiv(){
ReactDOM.findDOMNode(this.refs.theDiv.focus();
}
这是一把JS小提琴,你可以在上面玩