允许循环,但可能导致未初始化的值。考虑重构以消除循环的需要

时间:2019-04-13 10:54:13

标签: react-native

我在我的react-native项目的chrome控制台中收到此警告消息。你知道我为什么要得到这个吗?

这是完整的消息:

  

需要周期:node_modules / react-native-radio-buttons / lib / index.js->   node_modules / react-native-radio-buttons / lib / segmented-controls.js->   node_modules / react-native-radio-buttons / lib / index.js

     

允许使用要求周期,但可能导致未初始化的值。   考虑重构以消除循环的需要。

我很感谢任何建议。 谢谢

11 个答案:

答案 0 :(得分:6)

您可能正在将某些内容从“文件A”导入“文件B”,然后再次将某些内容从“文件B”导入“文件A”。 检查两个文件中的所有导入,看看是否有这样的循环。

答案 1 :(得分:6)

为了避免不得不写多行

import SomeComponent from "../components"
import AnotherComponent from "../components"
import AndAnotherComponent from "../components"
import AndOneMoreComponent from "../components"

我创建了一个comp.js文件,可以在其中导入创建时的组件并将其导出为模块。 这样一来,就可以到达所有组件。 这样您就可以在某个地方拥有类似的东西了……

import { SomeComponent, AnotherComponent, AndAnotherComponent, AndOneMoreComponent} from './comp'

现在,例如在渲染SomeComponent时,渲染器中会发生什么...。

import * as React from "react";
import { AnotherComponent} from '../comps';
import { View, Text } from "react-native";

function SomeComponent() {
return (
    <>
    <AnotherComponent />
    <View><Text>EXAMPLE OF SOMECOMPONENT</Text></View>
    </>
)
}
export default SomeComponent;

在该示例中,可以在主应用程序中调用SomeComponent,并且在呈现时它还会从comp.js中请求一个组件 之所以触发Require周期警告,是因为从一个位置导入的模块正在渲染,并要求从其渲染所在的位置导入另一个模块。

您对此有何想法,我应该回到使用单个导入语句还是您认为使用模块导出功能(由于当前已设置)存在危险吗?

答案 2 :(得分:3)

添加到@Peter答案如果要从同一索引文件导入,请尝试单独导入。

答案 3 :(得分:1)

我的情况是,我在本机反应中也遇到了同样的问题。

我做了什么?

我已经像下面那样使用react-navigation

 export const containerRef = createRef();

 function App(){
   return (
     <NavigationContainer ref={containerRef}>
       ....
     <NavigationContainer>
   );
 }

然后我像这样食用它:

import {containerRef} from 'filename';

onPress = ()=> containerRef.current.navigate('Chat');

但是我如下更新,警告消失了。

 function App(){
   return (
     <NavigationContainer> // removed ref
       ....
     <NavigationContainer>
   );
 }

然后我像这样食用它:

import { useNavigation } from '@react-navigation/native';

onPress = ()=> useNavigation.navigate('Chat');

答案 4 :(得分:1)

我在项目中使用了 react-native-maps,但遇到了同样的错误。

刚刚从 0.27.1 -> 0.28.0 升级。

我可以确认此问题已修复。

谢谢

答案 5 :(得分:0)

您在代码中使用了模块A,该模块导入(可能通过其他模块)模块B,而模块B又又导入了(也许通过其他模块)模块A。这是一个鸡蛋问题,因为任何一个都必须是第一个被加载的,另一个将在首次导入时未定义。

因此解决进口中的鸡肉问题,警告将消失。

答案 6 :(得分:0)

就我而言,警告是这样的

需要周期:src \ views \ TeamVerification.js-> src \ components \ TeamVerificationListItem.js-> src \ views \ TeamVerification.js允许使用要求周期,但可能会导致未初始化的值。考虑重构以消除循环的需要。

如前所述,TeamVerification正在导入TeamVerificationListItem,TeamVerificationListItem也正在导入TeamVerification。这是一个未使用的导入,但是在我删除它之后,警告消失了。

答案 7 :(得分:0)

请检查您是否在该文件中导入了相同的详细信息。 (即)

您的文件作为actions / meals.js,并且已将行添加到了相同的文件中,例如

import { Something } from './actions/meals.js'

答案 8 :(得分:0)

就我而言,安装“软件包”后,我也有同样的警告

在他们的文档中为import SomeFunc from 'package'

警告立即出现

允许使用要求周期,但可能导致未初始化的值。考虑重构以消除循环的需要。

但是一旦我破坏了SomeFunc,就再也没有警告

import {SomeFunc} from 'package'

请查看destructuring

答案 9 :(得分:0)

如果某些导入是通过require关键字完成的,则会引发此警告。将这些替换为import语句,您将很高兴。例如,

const abc = require("example"); // Don't use this syntax
import abc from "example"       // Use this syntax instead

注意:这可能因项目而异。要了解对require vs import的详细了解,请参阅this link

答案 10 :(得分:-1)

如果在 @react-navigation/native

中使用 NavigationContainer
import {createRef} from 'react';

<NavigationContainer ref={createRef()}>