reactjs - 如何在 React 中测试上下文?
问题描述
我已经实现了一个上下文:
import { createContext } from "react"
const initialState = {
type: "info",
visibile: true,
setVisible: () => { },
darkmode: false
}
const context = createContext(initialState)
export default context
但是当我想使用Enzyme对其进行测试时,我对我应该测试什么以及如何准确测试它感到困惑?
解决方案
我是这样用的
上下文文件,
import React, { useState, createContext } from "react"
const initialState = {
type: "info",
visibile: true,
darkmode: false
}
export const Context = createContext()
export function Provider({ children }) {
const [state, setState] = useState(initialState)
// using like this gives me ability to provide
// a function that can change the context data
const setVisible = val => setState({ ...state, visibile: val })
return (
<Context.Provider value={{ ...state, setVisible }}>
{children}
</Context.Provider>
)
}
在提供者(使用功能组件)中,
import React from "react";
import { Provider as ContextProvider } from './context.jsx'
import SomeComponent from './Consumer'
import SomeComponent2 from './Consumer2'
export default function App() {
return (
<ContextProvider>
<div>
<SomeComponent />
blah blahblah blahblah blahblah blahblah blah
<SomeComponent2 />
</div>
</ContextProvider>
);
}
在消费者中(使用功能组件),
import React, { useEffect, useContext } from 'react'
import { Context } from './context'
export default function SomeComponent() {
const contextData = useContext(Context)
useEffect(() => {
const timer = setInterval(() => {
contextData.setVisible(!contextData.visibile)
}, 1000)
return () => clearInterval(timer)
}, [contextData])
return (
<div>
<h2> Consumer 1 (Consuming & Changing) </h2>
<pre>{JSON.stringify(contextData, null, 4)}</pre>
</div>
)
}
假设你想如何使用上下文
推荐阅读
- postgresql - Postgresql 仅索引扫描在 Group By 上无法正常工作
- python - 如何将列表框中的选定项目值从一个模块返回到另一个模块?
- python - 通过命令提示符设置可选系统参数
- r - 如何在 R 中获取数值向量的元素,并创建一个包含从 1 开始的 seq 的新向量:(每个元素)
- node.js - 从 onelogin 进行身份验证并重定向到仪表板
- r - 如何从 R 中的另一个列表列表中删除列表列表?
- python - Scrapy - 重定向到验证码页面时抓取页面
- bash - BASH - OPTARG 中的 getopts 正则表达式
- react-native - TypeError:null 是一个对象(评估'reactNativeImagCropPicker.default.openPicker')
- opengl - LWJGL3 和 OpenGL 是否需要着色器才能渲染?