我在本地反应中使用了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>
);
}
答案 0 :(得分:2)
您收到此错误,是因为您是在useContext
实例而不是Context.Consumer
上调用Context
。
您确实如此:
export const LoginConsumer = MyContext.Consumer;
然后您在useContext
上致电LoginConsumer
:
let loginConsumer = useContext(LoginConsumer);
相反,您应该在useContext
上致电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>
);
}
答案 1 :(得分:0)
更改此代码后,警告将从控制台中删除
更改此
let loginConsumer = useContext(LoginConsumer);
对此
let loginConsumer = ()=> useContext(LoginConsumer);
我不知道为什么会这样,但是它从控制台中删除了警告
此答案有助于从控制台中删除警告
https://github.com/reactjs/rfcs/issues/72#issuecomment-437891201