【发布时间】:2019-07-03 16:46:09
【问题描述】:
我有一个 react-redux 应用程序,并且正在使用 react-transition-group 在状态更改中子组件位置更改时进行转换。但是,如果我的 redux 状态对象的顺序发生变化,组件将卸载然后重新安装,而不是更新。这可以防止组件平滑过渡到其新位置。有没有办法在不引入新状态的情况下解决这个问题?
我的父组件如下所示:
class ParentComponent extends Component {
...
render() {
return (
<div>
<div>
<CSSTransitionGroup>
<ChildComponents childComponentsToRender=
{this.props.someChildComponents}/>
<CSSTransitionGroup/>
</div>
</div>
)}}
ChildComponents 看起来像这样:
export default function ChildComponents(props) {
const childrenToReturn = _.map(props.childComponentsToRender,
(childComponent) =>
<ChildComponent
key={childComponent.uniqueId}
position={childComponent.position} .../>
return (
<Fragment>
{childrenToReturn}
</Fragment>
)
}
一个单独的 ChildComponent 看起来像这样:
export default function ChildComponent(props) {
return (
<div style={{transform: `translate(${props.position.x}px,
${props.position.y}px)`}}>
</div>
)
}
我渲染组件的 redux 状态如下:
{
...,
someChildComponents: {
childComponent1: {
id: someUniqueId,
position: {x: int, y: int}
},
childComponent2: {
id: someUniqueId,
position: {x: int, y: int}
},
...
},
...
}
如果调度了一个动作并且状态会发生变化,就会出现问题,例如:
{
someChildComponents: {
childComponent1: {
id: someUniqueId,
position: {x: 100, y: 100}
},
childComponent2: {
id: someUniqueId,
position: {x: 200, y: 200}
}
}
}
收件人:
{
someChildComponents: {
childComponent2: {
id: someUniqueId,
position: {x: 300, y: 300}
},
childComponent1: {
id: someUniqueId,
position: {x: 150, y: 150}
}
}
}
【问题讨论】:
-
对象不是 JavaScript 中的有序数据结构;您通过 name 而不是 position 访问他们的内容。
-
位置,我的意思是一个元素被翻译的 x,y 对。
标签: reactjs redux react-redux