我正在尝试创建一个HOC,它添加了一个工具提示(以后可以更加重复使用)。我已经提出了一些使用其他方法的工作解决方案,但我想尽可能简单地使用它。
基本上,我想知道是否有强制我的<Div />
组件在不向{props.children}
添加<Div />
的情况下渲染其子组件。如果可能的话,那么我将来可以做得更好。
import { nest } from 'recompose';
const Tooltip = () => <div style={{ position: 'absolute', top: 0, left: 0, height: '20px', width: '20px', backgroundColor: 'red' }} />;
const Div = (props) => {
console.log(props);
return (
<div
style={{
backgroundColor: '#F2F2F2',
height: '400px',
}}
>
<h1>content here</h1>
</div>
);
};
const DivWithTooltip = nest(Div, Tooltip);
答案 0 :(得分:1)
span
包装而不是div
来最小化可能的样式问题,通常没有问题。使用包装器或props.children
,您必须选择一个。
const withToolTip = ToolTip => Component => props => (
<div className="tooltip">
<Component {...props} />
<ToolTip {...props} />
</div>
)
const Div = props => (
<div>Hover over me</div>
)
const Tip = props => (
<div className="tooltiptext">tip</div>
)
const DivWithTooltip = withToolTip(Tip)(Div)
ReactDOM.render(
<DivWithTooltip />,
document.getElementById('app')
)
.tooltip .tooltiptext {
visibility: hidden;
}
.tooltip:hover .tooltiptext {
visibility: visible;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>