javascript - 反应上下文 API + 钩子
问题描述
我对 Context API 相当陌生。因此,基本上,当我按下 ButtonComponent 中的 Button 时,我希望 ButtonComponent 中的所有内容也会在 ImageComponent 中消失,但是当我单击 Button 时,什么也没有发生。我有点坚持这一点,如果可能的话,如果有人帮助我,我将非常感激。提前致谢!
//HiddenContext
import React from "react";
export const HiddenContext = React.createContext(false);
function HiddenProvider({ children }) {
const [hideButton, setHideButton] = React.useState(false);
function handleClick() {
setHideButton(true);
}
return (
<HiddenContext.Provider value={{ hideButton, handleClick }}>
{children}
</HiddenContext.Provider>
);
}
// App Component/Parent
import React, { useState } from 'react';
import './App.css';
export const HiddenContext = React.createContext(false);
function HiddenProvider({ children }) {
const [hideButton, setHideButton] = React.useState(false);
function handleClick() {
setHideButton(true);
}
return (
<HiddenContext.Provider value={{ hideButton, handleClick }}>
{children}
</HiddenContext.Provider>
);
}
function App() {
const { hideButton } = React.useContext(HiddenContext);
return (
<HiddenProvider>
<div className="App">
<ImageComponent hideButton={hideButton} />
</div>
</HiddenProvider>
);
}
//ButtonComponent
import React, {useState,ReactFragment} from 'react'
import { HiddenContext, } from './HiddenContext';
function ButtonComponent() {
const { hideButton, handleClick } = React.useContext(HiddenContext);
return (
<React.Fragment>
{!hideButton && (
<li>
<img className="image" src="./icons" alt="" />
<Button
onClick={handleClick}
variant="outlined"
className="button__rightpage"
>
Hide
</Button>
<caption className="text"> Hide</caption>
</li>
)}
</React.Fragment>
);
}
// ImageComponent
import React, {useState, ReactFragment} from 'react'
import { HiddenContext, } from './HiddenContext';
const ImageComponent = () => {
const { hideButton } = React.useContext(HiddenContext);
return (
<div>
{!hideButton && (
<React.Fragment>
<img src="icons/icon.png" alt="" />
<caption>Image </caption>
</React.Fragment>
)}
</div>
);
};
解决方案
您正在尝试访问提供者之外的上下文值(在 中App
)。尝试从 中删除它App
,如下所示:
function App() {
return (
<HiddenProvider>
<div className="App">
<ImageComponent />
</div>
</HiddenProvider>
);
}
推荐阅读
- c - 在 AIX 上编译 c 程序时出错 - “ld: 0711-317 ERROR: Undefined symbol: .iconv_open”
- cqrs - 应如何在使用 CQRS 的事件溯源中实现使用标准的搜索
- c# - 从 MDB 文件插入 SQL
- android - kotlin.jvm.functions.Function1不能在没有@Provides-annotated 方法的情况下提供
- mysql - MySql ODBC 连接器 3.1.14 和 mariaDB ;int 列为零
- kubernetes - 如果已经有作业在运行,如何防止在 Kubernetes 中执行 Cronjob?concurrencyPolicy:Forbid 完全停止 cron 作业执行
- generics - 如何获取变量的类型,以便调用 turbofish 函数?
- reactjs - 如何在 React 中单击时显示组件?
- flutter - 使用另一种方法查看每个项目检查
- c# - 使用 Newtonsoft 反序列化未命名数组的 JSON 数组