Как описано в официальной документации для response-select , я пытаюсь использовать ref и focus (), чтобы вручную установить фокус в поле ввода управления. В большинстве случаев это работает, но не сразу после выбора параметра из раскрывающегося списка.
После выбора параметра из раскрывающегося списка элемент управления получает фокус, но курсор не отображается. Он появляется только в том случае, если вы начинаете печатать (включая нажатие клавиши Esc). При последующих открытиях меню курсор появляется вместе с фокусом всего поля управления. Есть идеи, как заставить это работать?
Я создал пример кода в codesandbox.io здесь
Это код:
import React, { Component } from "react";
import ReactDOM from "react-dom";
import Select from "react-select";
import styled from "styled-components";
import { stateOptions } from "./data.js";
class PopoutExample extends Component {
selectRef = React.createRef();
state = {
isOpen: false,
option: undefined,
};
toggleOpen = () => {
const isOpening = !this.state.isOpen;
this.setState(
{
isOpen: isOpening,
},
() => isOpening && setTimeout(() => this.selectRef.focus(), 400),
);
};
onSelectChange = option => {
this.toggleOpen();
this.setState({ option });
};
render() {
const { isOpen, option } = this.state;
return (
<Dropdown
target={
<MainButton onClick={this.toggleOpen}>
{option ? option.label : "Select a State"}
</MainButton>
}
>
<Select
menuIsOpen
ref={ref => {
this.selectRef = ref;
}}
styles={{
container: provided => ({
...provided,
display: isOpen ? "block" : "none",
}),
}}
onChange={this.onSelectChange}
options={stateOptions}
value={option}
controlShouldRenderValue={false}
/>
</Dropdown>
);
}
}
const MainButton = styled.button`
padding: 10px;
background-color: aqua;
width: 100%;
`;
const Dropdown = ({ children, target }) => (
<div>
{target}
{children}
</div>
);
ReactDOM.render(<PopoutExample />, document.getElementById("root"));