Considere este trecho ( playground ):
<textarea onInput={event => {
console.log(event.key) // TypeScript error and undefined at runtime
setState(event.currentTarget.value)
}} />
Quero detectar se o usuário pressionou enter ou shift-enter.
O evento nativo do navegador possui propriedades key
e shiftKey
, que estão ausentes no evento do Solid. Também não consigo encontrar um equivalente à event.nativeEvent
propriedade do React.
Eu realmente preciso usar useKeyDownEvent ? Essa abordagem parece sofrer de uma condição de corrida ao usá-la dentro da área de texto onInput
...
O evento de entrada é acionado quando o valor de um elemento
<input>
,<select>
ou<textarea>
é alterado.Solid não substitui eventos, portanto, sua declaração sobre o objeto de evento com propriedades ausentes não é precisa. Você deve usar o evento keydown ou keyup:
https://developer.mozilla.org/en-US/docs/Web/API/Element/keydown_event
Não há condição de corrida, mas os navegadores observam uma ordem específica ao disparar eventos. Os eventos relacionados ao pressionamento de tecla ocorrem antes da alteração do valor, e a entrada ocorre depois.