Я не нахожу ответа на свою проблему для моего собственного приложения.
Если у вас есть идея, как этого добиться, это было бы здорово :)
Что я пытаюсь сделать:
На странице, когда я где-то нажимаю, я хочу отображать анимацию (например, квадратное привидение) в позиции нажатия.
Чего я добился: когда я нажимаю, отображается квадрат с анимацией в нужном месте. Но когда я нажимаю в другом месте, положение квадрата меняется, но анимация не перезапускается.
Что я пробовал:
Чтобы сделать анимацию, я помещаю ‹ View/> (с позицией: «абсолютная») на позицию нажатия.
Этот ‹ View/> встроен в компонент, который я вызываю 1 раз при рендеринге приложения:
<ClickAnimation x={item.x} y={item.y}/>
где item.x и item.y — координаты.
Это код моего компонента:
import React from 'react';
import {Animated, View} from 'react-native';
export default class ClickAnimation extends React.Component {
state = {
scaleAnim: new Animated.Value(0)
};
componentWillMount() {
Animated
.timing(this.state.scaleAnim, {
toValue: 2,
duration: 500
})
.start();
}
componentWillUpdate(nextProps) {
if (nextProps.x != this.props.x && nextProps.y != this.props.y) {
this.setState({
scaleAnim: new Animated.Value(0)
})
}
}
componentDidUpdate() {
console.log("componentDidUpdate",this.state.scaleAnim)
Animated
.timing(this.state.scaleAnim, {
toValue: 2,
duration: 500
})
.start();
}
render() {
return (<Animated.View
style={{
position: "absolute",
top: this.props.y,
left: this.props.x,
width: 50,
height: 50,
backgroundColor: "red",
transform: [
{
scaleY: this.state.scaleAnim
}, {
scaleX: this.state.scaleAnim
}, {
translateX: -25
}, {
translateY: -25
}
]
}}/>);
}
}
console.log в componentDidUpdate дает мне для каждого клика 2 журнала:
{_children: Array(2), _value: 2,..., _animation: null...}
{_children: Array(2), _value: 0,..., _animation: null...}
Я действительно не знаю, что делать дальше.
PS: В NativeScript это было проще. Мне нужно было просто добавить новый компонент в DOM.