【发布时间】:2021-05-11 00:02:52
【问题描述】:
编辑:
在提出这个问题之前,我在代码中犯了一些愚蠢的错误。我现在意识到,这个问题可能不会像我所说的实际上本身具有误导性那样对任何人有用。向那些回复的人道歉并感谢您。
我目前正在学习 React Native,并且遇到了一些不直观的行为。据我所知,可以使用 useEffect 挂钩来确定组件的生命周期(即何时安装和卸载)。当我更新组件中的状态(在本例中为“ComponentX”)时,整个组件似乎重新安装。我不认为这是预期的行为。如果有人能告诉我是不是这样 - 或者我做错了什么导致这种情况发生 - 那将非常有帮助!谢谢。
预期行为:组件不会卸载和重新安装。
实际行为:每次状态更改时组件都会重新挂载。
import React, { useEffect, useState } from "react";
import { Text, TouchableHighlight, View } from "react-native";
export default function App() {
return (
<ComponentX />
);
}
const ComponentX = () => {
const [componentState, setComponentState] = useState(0);
useEffect(() => {
console.log("mounted");
return () => console.log("unmounted");
}, []);
return (
<View style={{ flex: 1, justifyContent: "center" }}>
<TouchableHighlight
style={{ backgroundColor: "red", padding: 20 }}
onPress={() => {
setComponentState(componentState + 1);
}}
>
<Text>Update State</Text>
</TouchableHighlight>
<Text>{componentState}</Text>
</View>
);
};
【问题讨论】:
-
如果您还在
useEffect中记录componentState的值(不更新依赖数组),它会显示什么? -
这似乎是一个不足以产生任何组件重新安装的代码示例。你是说
ComponentX正在卸载和重新安装?什么是在App中重新安装它?仔细检查您的代码,看看您是否在componentState上添加了useEffect依赖项,这会导致每次更新componentState时都会调用您的效果回调,因为这会导致出现多个"mounted"日志。跨度>
标签: javascript reactjs react-native use-state