我试图弄清楚如何使规则react-hooks/exhaustive-deps
变得愉快,并使用Animated
库中的构建进行本机反应以使用useEffect制作动画。
下面的代码应在单击时突出显示按钮,方法是将其与彩色视图叠加。
const Component = props => {
const [active, setActive] = useState(false);
const [opacity, setOpacity] = useState(new Animated.Value(0));
useEffect(() => {
if (active) {
Animated.timing(opacity, {
toValue: 1,
duration: 200,
useNativeDriver: true
}).start();
} else {
setOpacity(new Animated.Value(0))
}
}, [active, opacity]); // <- Works fine without `opacity`, but eslint wants this
return (
<View>
<Animated.View style={{backgroundColor: "blue", opacity}} />
<TouchableOpacity onPress={()=> setActive(!active)} />
</View>
)
};
是否有任何方法可以执行此操作(使用useCallback,useMemo等)而不禁用规则?
答案 0 :(得分:2)
您无需致电setOpacity
,而可以使用setValue
:
opacity.setValue(0)
也不需要将opacity
添加到依赖项,因为它永远不会改变。 ESLint并不总是正确。