首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >热重装时过多的useEffect触发器

热重装时过多的useEffect触发器
EN

Stack Overflow用户
提问于 2022-09-13 12:30:43
回答 2查看 49关注 0票数 0

环境: React18,redux工具包(createAsyncThunk),没有StrictMode.

我的应用程序的useEffect在App.tsx中。App.tsxindex.tsx的一个子级,其中定义了存储。

代码语言:javascript
复制
  useEffect(() => {
   const defaultTerms = defaultTuples[~~(Math.random() * defaultTuples.length)];
   dispatch(getData({ terms: defaultTerms })
  );
}, [dispatch]);

它选择两个随机单词并运行createAsyncThunk,通过这个单词获取数据,并设置这些数据和两个单词来存储。因为我希望这个操作只执行一次--这个useEffect没有依赖项(只有调度是这个useEffect的dep )。

在正常的应用程序使用过程中,一切都很正常,但是在开发(热重加载)期间,每个代码都会更改(在定义了useEffect的文件中)运行这个useEffect,并为它们添加越来越多的单词/数据来存储。我在找一种方法来改变这种行为。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-13 12:30:43

我试图将这个初始请求移出,但得到了相同的行为。看起来像React完全破坏了这个文件和下面的树,但是当存储在这个组件上面初始化时,存储会记住旧的值,所以我们在那里添加多余的数据。

作为目前的解决方案:I将这个初始请求移动到src/index.tsx并将其从组件中删除

代码语言:javascript
复制
import { store } from 'toolkit/store';
import { getData } from 'toolkit/slices';

const data = defaultTuples[~~(Math.random() * defaultTuples.length)];
const defaultReq = () => {
 store.dispatch(getData({ data }));
};
defaultReq();

root.render(
 <ErrorBoundary>
  <BrowserRouter>
   <App>
    .............
票数 0
EN

Stack Overflow用户

发布于 2022-09-13 12:42:10

严格模式中,React会两次调用您的效果,以帮助您找到意外杂质。这是只开发的行为,不影响生产。如果您的效果是纯的(正如它们应该的那样),那么这不应该影响组件的逻辑。其中一个调用的结果将被忽略。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73703082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档