javascript - 如何禁止 ESLint 将项目添加到 useEffect 的观察者数组中?

标签 javascript reactjs react-hooks eslint tslint

我将 firebase firestore 与 React 实时结合使用,并将监听器放置在 useEffect 中。

这是代码

useEffect(() => {
    const unsub = db.collection('messages')
    .onSnapshot((querySnapshot) => {
        querySnapshot.forEach((doc) => {
            // Check if it's existing in messages
            const index = messages.findIndex(i => i.id === doc.id)

            if (index === -1) {
                const newMessage = {
                    id: doc.id,
                    ...doc.data()
                }
                setMessages([newMessage, ...messages])
            }
        });
    });

    return () => unsub()
}, [])

每次我尝试保存文件时,它都会在 useEffect 数组中添加 messages 状态

useEffect(() => {
    // code
}, [messages])

这变得很烦人,由于这种行为,它不断重新启动监听器并导致我获取重复的数据等。

我尝试搜索 ESLint 规则,但似乎找不到。

最佳答案

消息的问题。我认为它是来自 useSate 的变量。 Linter 建议将消息​​添加到依赖项数组中。下面的 MB 代码可以提供帮助。

import React, { useEffect, useState } form 'react';

const Component = () => {
  const [messages, setMessages] = useState([]);
  
  useEffect(() => {
    const unsub = db.collection('messages')
      .onSnapshot((querySnapshot) => {
        querySnapshot.forEach((doc) => {
          setMessages((prevMessages) => {
            const index = prevMessages.findIndex(({ id }) => id === doc.id);
            if (index !== -1) {
              return prevMessages;
            }
            
            return ([
              { id: doc.id, ...doc.data() },
              ...prevMessages,
            ]);
          });
        });
      });

    return unsub;
  }, []);
  
  return null;
};

关于javascript - 如何禁止 ESLint 将项目添加到 useEffect 的观察者数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60926727/

相关文章:

javascript - 如何在 React JS 的 html 属性中编写 JavaScript 代码

javascript - 用 html 更新 Ext.Window 不显示 html

java - 执行简单 JS 代码时 Selenium WD NullPointerException

javascript - 将对象存储在 React 组件的状态中?

javascript - 如何更改动态表中的特定图像?

reactjs - react : Function call after render() and before child's constructor()

javascript - 这是在react.js中设置父组件状态的正确方法吗

javascript - 与在 useEffect 中分配转发的 ref 相比,useImperativeHandle 有什么好处?

reactjs - 如何强制 React(使用钩子(Hook)的功能组件)在 props 更改时从头开始创建新组件?

reactjs - typescript 错误类型无法分配给状态 - usestate