我想我找到了另一种使用useContext钩子测试组件的方法。我看过一些教程,这些教程测试一个值是否可以从父上下文提供者成功传递给子组件,但没有找到关于更新上下文值的子组件的教程。
我的解决方案是将根父组件与提供程序一起呈现,因为状态最终在根父组件中更改,然后传递给提供程序,然后提供程序将其传递给所有子组件。对?
测试似乎在应该通过的时候通过,在不应该通过的时候不通过。有人可以解释为什么这是或不是测试useContext钩子的好方法吗?
根父组件:
...
const App = () => {
const [state, setState] = useState("Some Text")
const changeText = () => {
setState("Some Other Text")
}
...
<h1> Basic Hook useContext</h1>
<Context.Provider value={{changeTextProp: changeText,
stateProp: state
}} >
<TestHookContext />
</Context.Provider>
)}
Run Code Online (Sandbox Code Playgroud)
上下文对象:
import React from 'react';
const Context = React.createContext()
export default Context
Run Code Online (Sandbox Code Playgroud)
子组件:
import React, { useContext } from 'react';
import Context from '../store/context';
const TestHookContext = () => {
const context = …Run Code Online (Sandbox Code Playgroud) 所以我试图让原生地图在世博应用程序中工作,文档页面说“世博应用程序中不需要设置”
https://docs.expo.io/versions/latest/sdk/map-view/?redirected
但是在使用 expo 安装库后,它不起作用。
我有两个关于为什么它不起作用的基本问题:
在评论中私刑我之前,请听我说完。
当元素滚动到视图中时,intersectionobserver 应该监听吗?
但是当我这样做时,isVisible 属性是错误的,无法弄清楚原因。我认为这是因为我不理解 isVisible 属性,因为其他属性正在工作。
这是我的代码:
import React, { useRef, useEffect, useState, useContext } from 'react'
import ReactGA from 'react-ga';
import Context from '../utils/context'
const Home = props => {
const context = useContext(Context)
const [scrollState, setScroll] = useState(false)
const intersectTarget = useRef(null)
useEffect(() => {
// ReactGA.pageview(props.location.pathname);
if(!context.initialLoadProp) {
context.setInitialLoadProp(true)
}
}, [])
useEffect(() => {
const opts = {
root: null,
rootMargin: '0px',
threshold: 0
}
const callback = entry => {
console.log(entry)
}
const observerScroll …Run Code Online (Sandbox Code Playgroud)