У меня есть простое всплывающее окно в Semantic UI React, которое содержит поле ввода.Это поле ввода должно быть сразу же при открытии всплывающего окна.Пока не повезло.Вот что я пробовал:
import * as React from 'react';
import { Input, Label, Popup, Segment } from 'semantic-ui-react';
export class Test extends React.Component {
private searchInput: React.RefObject<Input>;
constructor(props: any) {
super(props);
this.searchInput = React.createRef();
}
public render() {
return (
<Popup
trigger={<Label>Test</Label>}
content={this.renderSelector()}
on="hover"
hoverable={true}
position="bottom left"
onOpen={() => this.focusInput()}
/>
)
}
private renderSelector() {
return (
<Segment>
<Input ref={this.searchInput} fluid={true} icon="search" iconPosition="left" />
</Segment>
)
}
private focusInput() {
if (this.searchInput.current) {
this.searchInput.current.focus()
}
}
}
this.searchInput.current
всегда равно нулю.Я также попытался обернуть входные данные в компонент Ref
, но с тем же результатом:
private renderSelector() {
return (
<Segment>
<Ref innerRef={this.searchInput}>
<Input fluid={true} icon="search" iconPosition="left" />
</Ref>
</Segment>
)
}
Наконец, даже при попытке найти входные данные в DOM я получаю нулевой результат:
private renderSelector() {
return (
<Segment>
<Input id="foobar" fluid={true} icon="search" iconPosition="left" />
</Segment>
)
}
private focusInput() {
const foo = document.getElementById("foobar");
if (foo) {
const bar = foo as HTMLInputElement;
bar.focus();
}
}
Есть идеи, что мне здесь не хватает?
Спасибо!