我正在使用 react + redux 开发一个应用程序来了解它,我怀疑以下情况的最佳解决方案是什么:
我有一个渲染 svg rect 的组件 Rectangle 和一个 RectangleControlPoints 子级。
render(){
return <g>
<rect x={this.props.x}
y={this.props.y}
width={this.props.width}
height={this.props.height}
className="cd-attribute-container"
onClick={this.props.onClick}
>
</rect>
<RectangleControlPoints rect_x={this.props.x}
rect_y={this.props.y}
rect_width={this.props.width}
rect_height={this.props.height}>
</RectangleControlPoints>
</g>}
如您所见,RectangleControlPoints 在道具上接收一些矩形坐标作为道具,进行一些计算,然后在矩形周围渲染一些点,使其能够调整大小。
计算和渲染点的矩形
当我使用 Redux 时,矩形的所有坐标都在 redux 存储中(不存储点坐标,我使用 memoization)。而当我拖动点时,存储中的矩形属性会发生变化,从而导致矩形的重新渲染,这很好,很棒。
现在我的应用程序正在增长,我意识到我将有许多不同类的案例,它们只会使用类 RectangleControlPoints 来呈现点以调整它的大小。但是每个人都会在商店里使用不同的地方。
我的第一个想法是创建一个 HOC 来包装 RectangleControlPoints 并使其存储连接灵活。它看起来像这样
export default ClassRectangleHOC( RectangleControlPoints );
export default OtherClassRectangleHOC( RectangleControlPoints );
乍一看,我认为它会起作用,HOC 将保存存储连接逻辑,而 EectangleControlPoints 将是可重用的。但是要调整三角形的大小,我需要访问Wrapped RectangleControlPoints 类中点的状态。我不知道这是否可能,但我认为如果是,那将是一种丑陋的方法。我确信有更好的方法来实现它。
简而言之,我想用不同的商店连接重用相同的元素。我认为 HOC 是一种很好的方法,但不知道最好的方法。
我希望我的解释很清楚。