使用fat arrow功能组件的ReactJS组件生命周期方法
要求:使用fat arrow功能组件的ReactJS组件生命周期方法,reactjs,firebase,Reactjs,Firebase,要求: 需要侦听firebase数据库引用 如果要在卸载组件时删除侦听器 在以下类似部分中: const Main = ({ collapsed, db, }) => { const intl = useIntl(); useEffect(() => { try { db.ref("AdminDashBoardDepartment").on("value", (snapshot) => {
const Main = ({
collapsed,
db,
}) =>
{
const intl = useIntl();
useEffect(() => {
try {
db.ref("AdminDashBoardDepartment").on("value", (snapshot) => {
console.log(snapshot.val());
});
} catch (error) {
console.log(error);
alert("error occurred. " + error);
}
}, []);
/* Following does not work on fat arrow functional component but works on a class based component.
componentWillUnmount()
{
console.log("Component is about to unmount.");
}*/
/* class based component has render method but arrow based function does not. */
return (
<main>
<h3> you will render element.</h3>
</main>
);
};
export default Main;
const Main=({
崩溃了,,
db,
}) =>
{
const intl=useIntl();
useffect(()=>{
试一试{
db.ref(“AdminDashBoardDepartment”).on(“值”(快照)=>{
console.log(snapshot.val());
});
}捕获(错误){
console.log(错误);
警报(“发生错误”。+错误);
}
}, []);
/*以下内容不适用于fat arrow功能组件,但适用于基于类的组件。
组件将卸载()
{
log(“组件即将卸载”);
}*/
/*基于类的组件具有呈现方法,但基于箭头的函数没有*/
返回(
您将渲染元素。
);
};
导出默认主;
我见过一些这样的解决方案,没有一个提到标题问题,其中大部分是这个和那个,到目前为止我发现的
我可以将此组件转换为基于类的组件,这没有问题,但这是唯一的解决方案吗
我已经在用了
useffect()
并且需要一个监听器
那么,在react组件中获取生命周期感知方法的可能性是什么,或者在需要时使用firebase db ref并自动卸载它的方式是什么,或者如果组件已卸载,则可以采用什么方式?要删除侦听器,请从
useffect
处理程序返回一个调用off()
的函数:
useEffect(() => {
let listener;
try {
listener = db.ref("AdminDashBoardDepartment").on("value", (snapshot) => {
console.log(snapshot.val());
});
} catch (error) {
console.log(error);
alert("error occurred. " + error);
}
return () => db.ref("AdminDashBoardDepartment").off("value", listener);
}, []);
另请参阅上的React文档。若要删除侦听器,请返回一个从
useffect
处理程序调用off()
的函数:
useEffect(() => {
let listener;
try {
listener = db.ref("AdminDashBoardDepartment").on("value", (snapshot) => {
console.log(snapshot.val());
});
} catch (error) {
console.log(error);
alert("error occurred. " + error);
}
return () => db.ref("AdminDashBoardDepartment").off("value", listener);
}, []);
另请参阅上的React文档。中的。您应该使用
off()
将其删除。您可以在useEffect中返回一个函数。此函数的作用类似于组件将卸载
,因此在内部添加offit@Akshay我知道。这不是关于如何删除db ref侦听器的问题。@Akshay感谢您的回复。您应该使用off()
从中删除它,您可以在useEffect中返回一个函数。此函数的作用类似于组件将卸载
,因此在内部添加offit@Akshay我知道。这与如何删除db ref listener无关。@Akshay感谢您的回复。