gpt4 book ai didi

reactjs - 如何在 React Native 中的 props 更改(通过 redux)时启动动画?

转载 作者:行者123 更新时间:2023-12-03 13:34:03 24 4
gpt4 key购买 nike

我的 React Native 应用程序中有一个重叠 View ,当用户按下按钮时,我需要在屏幕上和屏幕外显示动画。我知道如何定位 View 并为其设置动画,但我不知道如何触发动画。

我的 redux 存储有一个非常简单的状态,其中有一个 isOpen 标志,指示面板是打开还是关闭。我将状态映射到面板组件的 Prop ,当 isOpen Prop 更改时,我想触发打开或关闭动画。显然,如果用户在动画中间按下切换按钮,则需要取消当前正在运行的动画。

这应该很简单,但我找不到任何例子。任何帮助将不胜感激。

最佳答案

react native

要在 props 更改时开始动画,您只需在 componentDidUpdate开始动画即可。这是一个例子:

componentDidUpdate(prevProps) {
if (this.props.isOpen !== prevProps.isOpen) {
this.state.animation.start();
}
}

假设您的动画是在组件的状态中定义的。

React(浏览器):

[与此问题无关,但可能有用。]

实现此目的的一个简单方法是使用 CSS 过渡。您可以做的就是为面板组件提供一个 close (或 open)的 CSS 类,但我发现使用关闭/折叠作为样式更容易,因为默认情况下是打开的) .

然后在面板的渲染中:

render() {
const { isOpen } = this.props;

return <div className={ 'panel' + (isOpen ? '' : ' closed') }></div>
}

在你的 CSS 中:

.panel {
/* some other styles */
transition: .5s ease-in;
}

.closed {
height: 0;
}

这样 CSS 就可以处理动画逻辑,并解决您在当前动画完成之前单击打开/关闭按钮的问题。

以下是 CSS 转换文档:https://developer.mozilla.org/en-US/docs/Web/CSS/transition

编辑:此方法的缺点是在面板打开时必须显式设置高度。

这是一个小示例片段:

function togglePanel() {
const panel = document.querySelector('div.panel');
if (panel.classList.contains('closed')) {
panel.classList.remove('closed');
} else {
panel.classList.add('closed');
}
}
.panel {
background-color: #00c0de;
height: 4rem;
overflow: hidden;
transition: .5s ease-in;
}

.closed {
height: 0;
}
<button onclick='togglePanel()'>Toggle Panel</button>

<div class='panel closed'>
<span>Hello, I'm the panel</span>
</div>

关于reactjs - 如何在 React Native 中的 props 更改(通过 redux)时启动动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52021768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com