【发布时间】:2021-06-29 15:58:00
【问题描述】:
我曾尝试在useEffect 和return () => mounted.current = false 的开头使用mounted = useRef() 和let mounted.current = true,但我仍然收到此错误消息:
Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.
in NameDetails (at TitleRow.js:114)
in RCTView (at View.js:34)
in View (at TitleRow.js:113)
in titleRow (at TodayTitleList.js:154)
in RCTView (at View.js:34)
in View (at VirtualizedList.js:2015)
in VirtualizedListCellContextProvider (at VirtualizedList.js:2030)
in CellRenderer (at VirtualizedList.js:807)
in RCTScrollContentView (at ScrollView.js:1107)
in RCTScrollView (at ScrollView.js:1213)
in ScrollView (at ScrollView.js:1264)
in ScrollView (at VirtualizedList.js:1250)
in VirtualizedListContextProvider (at VirtualizedList.js:1080)
in VirtualizedList (at FlatList.js:620)
in FlatList (at TodayTitleList.js:149)
in RCTSafeAreaView (at SafeAreaView.js:51)
in SafeAreaView (at TodayTitleList.js:136)
查看堆栈跟踪,我冒昧地猜测错误在 NameDetails 文件中,它涉及其中的 useEffect。是这样吗?
以下是我的代码:
const NameDetails = ({ title }) => {
const [color, setColor] = useState('#000');
useEffect(() => {
//let mounted = true;
const getColor = async (id) => {
const chosenColor = await getColorFortitle(id);
setColor(chosenColor);
//return () => { mounted = false };
};
getColor(title.id);
});
return (
<View>
...
</View>
);
};
export default NameDetails;
更多信息:当我注销并尝试再次登录时会发生此错误,并且仅在某些时候发生。
【问题讨论】:
-
您好,请问您有什么问题?你只想修复错误?还是其他?
-
我想修复错误,是的,但也理解为什么设置布尔挂载不能解决问题。
-
可以使用状态吗?
-
请检查我的回答。
-
你可以得到状态的值。然后使用它。怎么样?
标签: reactjs react-native use-effect