Я хочу иметь возможность программно focus()
и select()
a react-select
. При нажатии на Add new brand
ниже:
должно отобразиться что-то вроде этого:
Вот что у меня есть.
Мой Select
компонент обернут в React.forwardRef
:
const Select = React.forwardRef((props, ref) => {
return (
<Creatable ref={ref} {...props} />
)
})
, так что я могу оформить его с помощью styled-components
и по-прежнему есть ref
на вход, например:
const BrandSelect = styled(Select)`...`
const Button = styled.button`...`
const MyComponent = () => {
const brandSelectRef = useRef()
const [newBrand, setNewBrand] = useState(false)
const handleAddBrand = () => {
setNewBrand(true)
console.log(brandSelectRef.current)
if (brandSelectRef && brandSelectRef.current) {
brandSelectRef.current.focus()
brandSelectRef.current.select()
}
}
return (
<BrandSelect
creatable
openMenuOnFocus
ref={brandSelectRef}
defaultInputValue={newBrand ? '...' : undefined}
// ...other required react-select props
/>
<Button onClick={handleAddBrand}>Add new brand</Button>
)
}
Проблема в том, что приведенный выше код не работает, то есть react-select
никогда не фокусируется. Кроме того, журнал brandSelectRef.current
- это undefined
.
Я явно что-то здесь не так делаю, но не могу определить, что.