Material ui select onchange不冒泡
Material ui select onchange is not bubbling
我有一个 div,它有一个 material ui Select、material ui TextField 和一个普通的 html select。
这个 div 有一个 onchange 事件,它只是控制台记录 event.target.value。当 material ui TextField 或 select 的 onchange 被触发时,event.target.value 被记录到控制台。但不适用于 material ui select.
的 onchange
示例代码:https://codesandbox.io/s/material-demo-03495?file=/demo.tsx
我在这里错过了什么?
谢谢。
您可以使用 native 属性。您将获得 UI 作为 Material 但功能与 native select 一样,因此也会出现气泡。
<Select
native
value={muiSelectValue}
onChange={handleMuiSelectOnChange}
autoWidth
>
<option value="one">One</option>
<option value="two">Two</option>
<option value="three">Three</option>
</Select>
你没有遗漏任何东西。如果您在句柄更改函数中添加 console.log(event)
,您将了解到本机元素的事件是 syntheticEvents
,您将在 MUI 的句柄更改中获得的事件将是 class
作为对象.因此,无论何时更改值,它都不会反映到您的实际 div.
触发更改的事件确实冒泡,但它不是 "change" 事件。您提供的 onChange
函数被调用以响应 click event on the MenuItem
. And even that "click" event could either be a click event or a key down event(例如,如果您使用箭头键然后 Enter 到 select 一个项目) .
这是对沙箱的修改,增加了一些控制台日志记录:https://codesandbox.io/s/material-demo-u5b51?file=/demo.tsx。
我有一个 div,它有一个 material ui Select、material ui TextField 和一个普通的 html select。 这个 div 有一个 onchange 事件,它只是控制台记录 event.target.value。当 material ui TextField 或 select 的 onchange 被触发时,event.target.value 被记录到控制台。但不适用于 material ui select.
的 onchange示例代码:https://codesandbox.io/s/material-demo-03495?file=/demo.tsx
我在这里错过了什么?
谢谢。
您可以使用 native 属性。您将获得 UI 作为 Material 但功能与 native select 一样,因此也会出现气泡。
<Select
native
value={muiSelectValue}
onChange={handleMuiSelectOnChange}
autoWidth
>
<option value="one">One</option>
<option value="two">Two</option>
<option value="three">Three</option>
</Select>
你没有遗漏任何东西。如果您在句柄更改函数中添加 console.log(event)
,您将了解到本机元素的事件是 syntheticEvents
,您将在 MUI 的句柄更改中获得的事件将是 class
作为对象.因此,无论何时更改值,它都不会反映到您的实际 div.
触发更改的事件确实冒泡,但它不是 "change" 事件。您提供的 onChange
函数被调用以响应 click event on the MenuItem
. And even that "click" event could either be a click event or a key down event(例如,如果您使用箭头键然后 Enter 到 select 一个项目) .
这是对沙箱的修改,增加了一些控制台日志记录:https://codesandbox.io/s/material-demo-u5b51?file=/demo.tsx。