反应子组件在重新渲染时丢失动画 [英] React child component loses animation upon re-render
本文介绍了反应子组件在重新渲染时丢失动画的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个使用Material UI的Reaction应用程序,下面显示了一个组件(我们可以称之为DatePicker
),出于演示的目的,对其进行了偷偷的更改。
我可以从技术角度理解为什么会发生这种情况;DatePicker
组件调用setMinutes
,这是从其父组件(状态所在的位置)传入的属性。这是一个React.useState
变量,然后更新其相应的minutes
变量。然后将分钟传递给DatePicker
,后者因属性更改而重新呈现。
如果状态位于DatePicker
内,则此问题不应抬头;但是,DatePicker
是一个更大的表单的一部分,该表单指定父级中的表的内容。若要为此表生成行,父级必须具有此信息。
下面是父级的重建示例:
const Parent = () => {
const [minutes, setMinutes] = React.useState(15);
const [radioOption, setRadioOption] = React.useState('Thank You');
// Many other state variables here to hold other filter information
return (<div>
<DatePicker minutes={minutes} setMinutes={setMinutes} radioOption={radioOption} setRadioOption={setRadioOption}/>
</div>);
};
这里是DatePicker
的示例重建:
const DatePicker: React.FC<DatePickerProps> = props => {
const {minutes, setMinutes, radioOption, setRadioOption} = props;
return (<div>
<Radios value={radioOption} onChange={val => setRadioOption(val)}/>
<Minutes value={minutes} onChange{val => setMinutes(val)}/>
</div>);
};
我不确定这种情况下的最佳实践是什么,但我有一种明显的感觉,那不是它。有人有什么建议吗?提前感谢!
推荐答案
感谢您的评论,Ryan Cogswell。我确实创建了一个代码沙箱,并且发现问题与其说是关于反应状态管理,不如说是我正在做的事情超出了我在问题中提供的。
我使用withStyles HOC包装我的组件,方式类似于const StyledDatePicker = withStyles(styles)(DatePicker)
。然后,我使用该样式化元素并在其上添加属性(minutes
等)。
DatePicker
可以解决此问题。我对此进行了进一步的故障排除,发现我已经在父级的"Render"方法中创建了"Styled"组件,这意味着每次在链中向上推入道具更改时,父级都会重新呈现,并且会再次创建整个"Style"组件类型(至少我是这样认为的)。这将破坏引用完整性,这解释了"删除并重新创建"行为。
这教授了保持组件较小并使用代码沙箱进行故障排除的宝贵经验。再次感谢!
对于任何感兴趣的人,这里是用于测试的Code Sandbox。
这篇关于反应子组件在重新渲染时丢失动画的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文