我想将样式cursor:pointer
应用于具有onClick函数的所有React元素。我知道我可以对每个元素都这样做:
<a onClick={handleClick} style={{cursor:'pointer'}}>Click me</a>
或者这个:
<a onClick={handleClick} className="someClassWithCursorPointer">Click me</a>
但我宁愿能够做这样的事情来将风格应用于所有元素:
<style>
[onclick] {
cursor: pointer;
}
</style>
但是这不起作用,因为在使用React的onclick
属性时,元素的呈现HTML中没有实际的onClick
属性。
答案 0 :(得分:3)
我不确定是否有一种很好的方法可以自动执行此操作而不使用某种拦截React元素的创建并修改它们(或者可能是源级转换)的机制。例如,使用Babel,您可以使用babel-plugin-react-transform并使用className
道具添加onClick
使用这些行中的内容(警告:伪代码):
export default function addClassNamesToOnClickElements() {
return function wrap(ReactClass) {
const originalRender = ReactClass.prototype.render;
ReactClass.prototype.render = function render() {
var element = originalRender.apply(this, arguments);
return addClickClassNamesToApplicableElements(element);
}
return ReactClass;
}
}
function addClassNamesToApplicableElements(elem) {
if (!elem || typeof elem === "string") return elem;
const children = elem.children;
const modifiedChildren = elem.props.children.map(addClassNamesToApplicableElements);
if (elem.props.onClick) {
const className = elem.props.className || "";
return {
...elem,
props: {
...elem.props,
className: (className + " hasOnClick").trim(),
children: modifiedChildren
}
};
} else {
return {
...elem,
props: {
...elem.props,
children: modifiedChildren
}
}
};
}
第二部分工作的{p> Here's a quick example:https://bit.ly/1kSFcsg
答案 1 :(得分:-4)
您可以使用css轻松完成此操作:
a:hover {
cursor:pointer;
}