我有以下代码-想法是创建动画折线(用于地图)。我在互联网上找到了一些东西,但都是“旧”方法/没有useEffect
,useState
...
我无法清除polylinePath
中的else
数组-我正在尝试打印出当前长度,但是它总是从props.Direction
返回初始状态长度。你能帮助我吗?我不知道为什么我的AnimatedPolyline无法正常工作。
import React, { useState, useEffect, Fragment } from 'react';
import { Polyline } from 'react-native-maps';
export default function AnimatedPolyline(props) {
const [polylinePath, setPolylinePath] = useState(props.Direction);
useEffect(() => {
const interval = setInterval(() => {
animatePolylineStart();
}, 70);
return () => clearInterval(interval);
}, [props.Direction]); //tried [], too
const animatePolylineStart = () => {
if (polylinePath.length < props.Direction.length) {
const Direction = props.Direction;
const polylinePathTemp = [
...Direction.slice(0, polylinePath.length - 1)
];
setPolylinePath(polylinePathTemp);
} else {
setPolylinePath([]);
}
};
return (
<Fragment>
{
(polylinePath.length > 0) && <Polyline
coordinates={polylinePath}
strokeColor="#484848"
strokeWidth={5}
/>
}
</Fragment>
);
}
答案 0 :(得分:0)
在使用效果中,当您将空数组用作依赖项时,它将永远不会移动,因此使用效果将仅被调用一次(例如componentDidMount)。因此,这里的使用效果应取决于方向。
> (nondecreaselist '(1 2 3 4 1 2 3 4 1 1 1 2 1 1 0 4 3 2 1))
((1 2 3 4) (1 2 3 4) (1 1 1 2) (1 1) (0 4) (3) (2) (1))
> (nondecreaselist-2 '(1 2 3 4 1 2 3 4 1 1 1 2 1 1 0 4 3 2 1))
((1 2 3 4) (1 2 3 4) (1 1 1 2) (1 1) (0 4) (3) (2) (1))
答案 1 :(得分:0)
在useEffect方法中返回setPolyLinePath([])
useEffect(() => {
return () => {
clearInterval(interval);
setPolyLinePath([])
};
}, []);