使用 useEffect 刷新表

Posted

技术标签:

【中文标题】使用 useEffect 刷新表【英文标题】:refresh table with useEffect 【发布时间】:2020-05-05 07:43:19 【问题描述】:

我是新手,我有以下问题:useEffect 正在更新无限次,但我只想在我插入新记录时更新数据,如果有人能纠正我,我将不胜感激。

这是我的代码:

index.js

import createUser, getUsers from '../actions';

const Home = () => 
    const [data, setData] = useState([]);

useEffect(() => 
    async function fetchData()
        const result = await getUsers();
        setData(result);
        console.log("teste: ", result);
    
    fetchData();
, [setData]);

const handleCreateUser = (user) => 
    createUser(user).then((users) => 
    );
;

如果我设置第二个参数 useEffect(() => , [setData]),它会打破无限循环,但当我插入新寄存器时表格不会更新,我需要使用 F5。

我做错了什么? 创建用户工作正常,我只想在同一时间加入表格

【问题讨论】:

你的表格组件在哪里?你使用任何 npm 包吗?也为它添加代码。 【参考方案1】:

我遇到了确切的问题。我想使用一个功能组件,我的请求回来后我不得不画一张桌子。如果我使用[] 作为第二个参数,网页将加载一次,因此图表不会更新。当我在依赖项中添加一些东西时,我的页面会无限期地重新加载。我应该提一下,我将我的状态之一作为我用 useState() 钩子定义的依赖项。

为了克服这种情况,我将我的组件变成了基于类的组件。这是因为我不应该通过道具。但这不是解决方案,如果有帮助,我可以分享代码。

【讨论】:

【参考方案2】:

您可以将依赖关系数组留空,这样它只会运行一次。

希望这能帮助您更好地理解。

   useEffect(() => 
      doSomething()
    , []) 

空依赖数组只在挂载上运行一次

useEffect(() => 
  doSomething(value)
, [value]) 

将值作为依赖项传递。如果依赖关系自上次以来发生了变化,效果将再次运行。

useEffect(() => 
  doSomething(value)
) 

没有依赖。每次渲染后都会调用它。

【讨论】:

【参考方案3】:

您似乎只想获取一次数据(在组件加载时)。如果是这样,just use an empty array 用于您的依赖项

useEffect(() => 
    async function fetchData()
        const result = await getUsers();
        setData(result);
        console.log("teste: ", result);
    
    fetchData();
, []);

【讨论】:

【参考方案4】:

useEffect 中,如果没有第二个参数(依赖项数组),您的效果将无限期运行。

如果您只想在创建新用户时运行效果,您可以创建一个单独的状态,然后将其包含到 useEffect 的依赖项中,例如将其称为 refreshKey。我的建议是:

import createUser, getUsers from '../actions';

const Home = () => 
    const [data, setData] = useState([]);
    const [refreshKey, setRefreshKey] = useState(0);

useEffect(() => 
    async function fetchData()
        const result = await getUsers();
        setData(result);
        console.log("teste: ", result);
    
    fetchData();
, [refreshKey]);

const handleCreateUser = (user) => 
    createUser(user).then((users) => 
      // Refresh the effect by incrementing 1
      setRefreshKey(oldKey => oldKey +1)
    );
;

【讨论】:

@gabrielgraciani 如果您能将我的回答标记为有帮助,我将不胜感激

以上是关于使用 useEffect 刷新表的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ionic 从另一个页面重定向时不会触发 useEffect

带有 useEffect 的 Next.js useRouter 即使在页面刷新时满足条件也会推送

Next js 应用刷新时,useEffect 不调度 redux saga 动作并更新状态

useEffect 中的套接字连接事件在创建组件时不起作用,但在 React 中刷新页面后起作用

如何更新反应表的数据

从useEffect动态呈现样式表?