Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用fat arrow功能组件的ReactJS组件生命周期方法_Reactjs_Firebase - Fatal编程技术网

使用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) => {

要求:

  • 需要侦听firebase数据库引用
  • 如果要在卸载组件时删除侦听器
  • 在以下类似部分中:

    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感谢您的回复。