onSubmit 无法在渲染道具(React)中输入
onSubmit not working on enter in render props (React)
我需要一个表单内的按钮,当用户按下 Enter 按钮时触发 onSubmit
事件。
这是可行解决方案的示例:
<form onSubmit={() => console.log('ok')}>
<button type="submit" autoFocus>Submit</button>
</form>
当用户按下 Enter 时,onSubmit
被正确触发。
我的问题是当我必须在组件的渲染道具中渲染这个按钮时:
<Component render={()=> (
<button type="submit" autoFocus /> // here the button will not be focused
)}/>
所以当我按下 Enter 时,没有任何反应。
有什么方法可以仅使用 html 个属性来获得可行的解决方案吗?
它不起作用,因为在您的示例中按钮 onClick
事件未连接到 GoogleLogin
或包装 Component
.
一步一步:
由于 autoFocus
,当您的按钮呈现时它会自动聚焦。只要您在 enter
仍处于焦点状态时单击它,就会触发该按钮的单击事件。
在纯 html
示例中,表单的 onSubmit
被触发,因为按钮有一个 type="submit"
.
<form onSubmit={() => console.log('ok')}>
<button type="submit" autoFocus>Submit</button>
</form>
因此,如果您希望您的示例在单击 enter
时触发 GoogleLogin
,您必须在单击按钮时通过道具手动触发它:
<GoogleLogin
render={(renderProps) => (!renderProps.disabled ?
<button autoFocus onClick={renderProps.onClick}>
This is my custom Google button
</button>: null
)}
/>
请记住,如果用户单击 Tab,自动对焦将丢失并且 enter
输入将不再触发 onClick
事件。
相反,您可以设置一个事件侦听器,它将侦听 enter
输入并在呈现时触发 GoogleLogin,与 autoFocus 无关。或者您让您的用户单击该按钮而不是输入。
我需要一个表单内的按钮,当用户按下 Enter 按钮时触发 onSubmit
事件。
这是可行解决方案的示例:
<form onSubmit={() => console.log('ok')}>
<button type="submit" autoFocus>Submit</button>
</form>
当用户按下 Enter 时,onSubmit
被正确触发。
我的问题是当我必须在组件的渲染道具中渲染这个按钮时:
<Component render={()=> (
<button type="submit" autoFocus /> // here the button will not be focused
)}/>
所以当我按下 Enter 时,没有任何反应。
有什么方法可以仅使用 html 个属性来获得可行的解决方案吗?
它不起作用,因为在您的示例中按钮 onClick
事件未连接到 GoogleLogin
或包装 Component
.
一步一步:
由于 autoFocus
,当您的按钮呈现时它会自动聚焦。只要您在 enter
仍处于焦点状态时单击它,就会触发该按钮的单击事件。
在纯 html
示例中,表单的 onSubmit
被触发,因为按钮有一个 type="submit"
.
<form onSubmit={() => console.log('ok')}>
<button type="submit" autoFocus>Submit</button>
</form>
因此,如果您希望您的示例在单击 enter
时触发 GoogleLogin
,您必须在单击按钮时通过道具手动触发它:
<GoogleLogin
render={(renderProps) => (!renderProps.disabled ?
<button autoFocus onClick={renderProps.onClick}>
This is my custom Google button
</button>: null
)}
/>
请记住,如果用户单击 Tab,自动对焦将丢失并且 enter
输入将不再触发 onClick
事件。
相反,您可以设置一个事件侦听器,它将侦听 enter
输入并在呈现时触发 GoogleLogin,与 autoFocus 无关。或者您让您的用户单击该按钮而不是输入。