文档中的属性列表不包括 onClick
(http://www.material-ui.com/#/components/icon-button)。
我如何知道需要使用 onClick 作为单击处理程序?
文档中的属性列表不包括 onClick
(http://www.material-ui.com/#/components/icon-button)。
我如何知道需要使用 onClick 作为单击处理程序?
Material-UI的文档没有列出标准的React(原生浏览器)事件:
https://facebook.github.io/react/docs/events.html#mouse-events
这是因为你预期已经知道可用的原生事件。例如,你也可以使用 onWheel
。如果包含所有原生事件,那么列表将非常冗长且重复。
如kouak所解释的,其他属性(如onClick
)会传递给相关的子组件。
随机示例:
<Button color="primary" onClick={() => { console.log('onClick'); }}>
Primary
</Button>
您可以在 <IconButton/>
上添加一个包装器以获取 onClick
事件。
示例
render() {
return <div class="font-icon-wrapper" onClick={this.fontIconClick}>
<IconButton iconClassName="muidocs-icon-custom-github" />
</div>
}
这一定会起作用...
只需在传递到 <IconButton />
的 props 中添加 onClick
。
未在文档中列出的 props 将传递到其内部的 <EnhancedButton />
组件中,该组件将很好地处理 onClick
。
可参见此处:https://github.com/callemall/material-ui/blob/master/src/IconButton/IconButton.js#L241
所有组件都接受一个onClick
处理程序,该处理程序应用于根DOM元素。
<Button onClick={() => { alert('clicked') }}>Click me</Button>
我们应该始终为父组件提供onClick事件,因为有时依赖于浏览器,如果我们将其提供给子组件,事件可能无法正常工作。
例如:
错误:
<TextField
label={label}
value={state.inputValue}
InputProps={{
endAdornment: (
<InputAdornment position='end'>
<IconButton style={{ padding: '3px' }}>
{state.inputValue?.length > 1 ? (
<ClearIcon onClick={handleClear}/>
) : (
<DateRangeIcon onClick={onAdornmentClick}/>
)}
</IconButton>
</InputAdornment>
),
}}
/>
解决方案:
<TextField
label={label}
value={state.inputValue}
InputProps={{
endAdornment: (
<InputAdornment position='end' onClick={state.inputValue?.length > 1 ? handleClear : onAdornmentClick}>
<IconButton style={{ padding: '3px' }}>
{state.inputValue?.length > 1 ? (
<ClearIcon/>
) : (
<DateRangeIcon/>
)}
</IconButton>
</InputAdornment>
),
}}
/>
refs
这样的东西非常困难,因为你必须通过15个层次的层级来查找它们的组件,而且我一直在破坏组件封装。问题在于refs
被推荐用于第三方dom元素。只要记住这是三年前的事情,很多东西可能已经改变了。 - Train