∮ ∮我面对的是:
我有一个小型RN项目,在实现了全局状态管理的一些基本逻辑之后,当我启动/重新启动我的项目时,我得到了这个错误:
Require cycle: App.js -> src\navigation.js -> src\components\Drawer.js -> App.js
Require cycles are allowed, but can result in uninitialized values.
Consider refactoring to remove the need for a cycle.
//Error route info
Require cycle: App.js -> src\navigation.js -> src\pages\signIn.js -> App.js
Require cycles are allowed, but can result in uninitialized values.
Consider refactoring to remove the need for a cycle.
//Error route info
Require cycle: App.js -> src\navigation.js -> App.js
Require cycles are allowed, but can result in uninitialized values.
Consider refactoring to remove the need for a cycle.
//Error route info
我写了我的代码基于this guide从React导航文档与一些小的变化,它的工作与预期的条件渲染和所有,但我不断得到这个恼人的错误,我真的想摆脱它。
我的密码:
- 应用程序js**
//Useless imports
import Navigator from './src/navigation';
import appReducer from './src/reducers';
export const AuthContext = createContext();
const App = () => {
const [state, dispatch] = useReducer(appReducer, initialStates);
//useEffect to fetch stored credentials and change initialStates
//for conditional rendering purposes
return (
<AuthContext.Provider value={[state, dispatch]}>
<Navigator/>
</AuthContext.Provider>
);
}
export default App;
- 导航. js**
//Useless imports
import { AuthContext } from '../App';
import SignIn from './pages/SignIn';
import Drawer from './components/Drawer'; //Used in my Drawer Navigator declaration,
//but I'll abstract some of my nav logic
export const Navigator = () => {
const [state, dispatch] = useContext(AuthContext);
return (
<NavigationContainer>
{
state.someState ?
<Screen1 component={SignIn} />
:
<Screen2 component={Screen2} />
}
</NavigationContainer>
);
}
- 抽屉**
///Useless imports
import { AuthContext } from '../../App';
export const Drawer = () => {
const [state, dispatch] = useContext(AuthContext);
return (
<Drawer>
<Button onPress={() => dispatch({type: 'SIGN_OUT'})}/>
</Drawer>
);
}
- 登录. js**
//Useless imports
import { AuthContext } from '../../App';
export const SignIn = () => {
const [state, dispatch] = useContext(AuthContext);
return (
<View>
<Button onPress={() => dispatch({type: 'SIGN_IN'})/>
</View>
);
}
我真的不认为我的reducer声明或任何类似的东西有问题,因为正如我之前所说的,条件渲染按预期工作,当我从组件或页面注解AuthContext
导入时,警告消失了。
以下是我的文件夹结构,仅供参考:
My-App/
├── src/
│ ├── components/
│ │ └── Drawer.js
│ ├── pages/
│ │ └── SignIn.js
│ ├── reducers/
│ │ └── appReducer.js
│ └── navigation.js
└── App.js
1条答案
按热度按时间wlzqhblo1#
警告正确;由于您是从App导出
AuthContext
,然后将其导入到嵌套组件中,因此您已经创建了一个循环。最简单的方法是将AuthContext
移动到由App和登录页面导入的单独文件中。