gpt4 book ai didi

javascript - 使用 React 聚焦 div 元素

转载 作者:可可西里 更新时间:2023-11-01 01:29:49 26 4
gpt4 key购买 nike

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

我已将 tabIndex 设置为 div 元素:

<div ref="dropdown" tabIndex="1"></div>

我可以看到当我点击它时它会获得焦点,但是,我正在尝试像这样动态地聚焦元素:

setActive(state) {
ReactDOM.findDOMNode(this.refs.dropdown).focus();
}

或者像这样:

this.refs.dropdown.focus();

但是当事件被触发时组件并没有获得焦点。我怎样才能做到这一点?我可以为此使用任何其他(非输入)元素吗?

编辑:

好吧,看起来这实际上是可能的:https://jsfiddle.net/69z2wepo/54201/

但这对我不起作用,这是我的完整代码:

class ColorPicker extends React.Component {
constructor(props) {
super(props);

this.state = {
active: false,
value: ""
};
}

selectItem(color) {
this.setState({ value: color, active: false });
}

setActive(state) {
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((color, index) => {
const colorClasses = classNames('colorpicker-item', [`colorpicker-item-${color}`]);

return (
<div onClick={() => { this.selectItem(color) }} key={index} className="colorpicker-item-container">
<div className={colorClasses}></div>
</div>
);
});

return (
<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 或状态元素聚焦元素,使用 componentDidUpdatecomponentDidMount 方法会很方便。

请记住,根据 React Lifecycle 文档,componentDidMount 只会在第一次在屏幕上渲染组件后发生,而在此调用中 componentDidUpdate 不会发生发生,然后对于每个新的 setStateforceUpdate 调用或接收新 Prop 的组件,将发生 componentDidUpdate 调用。

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

这是一个JS fiddle你可以玩。

关于javascript - 使用 React 聚焦 div 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39174887/

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