反应本机UseState数组清除

时间:2020-04-09 09:41:52

标签: javascript reactjs react-native use-state

我有以下代码-想法是创建动画折线(用于地图)。我在互联网上找到了一些东西,但都是“旧”方法/没有useEffectuseState ... 我无法清除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>
      );
  }

2 个答案:

答案 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([])
    };
  }, []);