【发布时间】:2021-11-12 02:27:15
【问题描述】:
我正在使用 React 的 Context API 将一些上下文传递给较低级别的组件。
我希望能够在没有上下文提供程序的情况下运行组件(用于测试)。为此,我需要检查我的组件周围是否有上下文提供程序。
示例代码:
const Wrapper = () => {
// in my real app, there are some levels
// between the provider and the child component
return <NameProvider value={name: 'User'}>
<ChildComponent />
</NameProvider>
}
const ChildComponent = () => {
if (/* what can I put here ? */) {
// inside Provider
return <NameConsumer>
{context => <span>{context.name}</span>}
</NameConsumer>
} else {
// no provider available, e.g. in a test file
return <span>Test Text</span>
}
}
这个问题不是专门针对测试的。在其他情况下,组件可能需要在上下文提供程序内部和外部工作。
【问题讨论】:
-
这不是一个好主意.. 检查这个库this
-
这不是仅出于测试目的而修改组件本身的好方法。您最好尝试在测试中模拟上下文。
-
@ArupRakshit 那个 api 似乎使用旧的上下文,而不是 React 16.3 中的新上下文
-
目前还不清楚在您定义
ChildComponent的地方导入Provider有什么问题,特别是如果这是出于测试目的。 -
@estus 在我的情况下,问题是这个 Provider 不配合 Enzyme 的 mount 功能(产生错误)。也就是说,答案可能是“无法确定我们是否在上下文提供者中”。
标签: reactjs