reactjs - useContext(Context) 在 React Native 的控制台上显示警告
问题描述
我React Context API
在本机反应中使用了钩子。我创建了Consumer
并且Provider
都将道具和状态从父母传递给孩子。代码工作得很好,我收到了父母给孩子的道具。
我在控制台上收到以下警告:-
警告:不支持调用 useContext(Context.Consumer),可能会导致错误,并将在未来的主要版本中删除。您的意思是改为调用 useContext(Context) 吗?
请检查下面添加的代码:-
我已经创建了通用上下文文件CommonContext.js
。
import React, {createContext} from 'react';
const MyContext = createContext();
export const LoginProvider = MyContext.Provider;
export const LoginConsumer = MyContext.Consumer;
这是我的提供商代码
import React, {PureComponent} from 'react';
import {View, Text} from 'react-native';
import {LoginProvider} from './CommonContext';
export default class Login extends PureComponent {
constructor(props) {
super(props);
}
render() {
return (
<View style={Styles.mainContainer}>
<LoginProvider value={this.props}>
<LoginScreenView />
</LoginProvider>
</View>
);
}
}
通过这种方式,我将父组件数据访问到子挂钩中
import {LoginConsumer} from './CommonContext';
export default function LoginScreenView(props) {
let loginConsumer = useContext(LoginConsumer);
return (
<View style={Styles.mainContainer}>
<Text>{loginConsumer}</Text>
</View>
);
}
解决方案
您收到此错误是因为您正在调用useContext
实例Context.Consumer
,而不是Context
.
你这样做:
export const LoginConsumer = MyContext.Consumer;
然后你useContext
打电话LoginConsumer
:
let loginConsumer = useContext(LoginConsumer);
相反,您应该调用useContext
on MyContext
,如下所示:
- 导出上下文
CommonContext.js
:
export const MyContext = createContext();
- 在您使用它的文件中导入上下文而不是上下文使用者:
import { MyContext } from './CommonContext';
- 然后使用它
useContext
:
let login = useContext(MyContext);
因此,您发布的第二个组件将如下所示:
import { MyContext } from './CommonContext';
export default function LoginScreenView(props) {
let login = useContext(MyContext);
return (
<View style={Styles.mainContainer}>
<Text>{login}</Text>
</View>
);
}
推荐阅读
- c# - NServiceBus 可恢复性失败时发送消息
- javascript - Android WebView WebArchive 加载后冻结
- web-services - SOAP 隐式标头
- ssis - SSIS中依赖限制中的未映射列
- c - 在 for 循环 C 中使用 fscanf 读取文件
- c# - 在错误解析或读取时获取整个 CSV 行
- autodesk-viewer - API 调用强制查看器调整大小以适应约束
- allure - @Step 可以在 Allure 中动态吗?
- html - 滚动条在那里,即使没有内容?
- java - Drools 错误:在 [dules.drl 中的规则“冷检查”] 中评估约束“字符串”时出错