javascript - 通过状态隐藏 React 中的项目
问题描述
所以我想当我按下按钮组件中的按钮时,“li 部分”中的所有内容以及 ImageComponent 中的所有内容都会消失,但它不起作用我想知道我的错误是什么。ButtonComponent 在其他地方呈现。
App Component/Parent
function App({ hideButton }) {
return (
<div className="App">
<ImageComponent hideButton={hideButton} />
</div>
);
}
// ButtonComponent
function ButtonComponent() {
const [hideButton, setHideButton] = React.useState(false)
function handleClick() {
setHideButton(true)
}
return (
{
!hideButton && (
<li>
<img className="image"src="./icons/>
<Button onClick={handleClick} variant="outlined" className="button__rightpage" >Hide</Button>
<caption className="text"> Hide</caption>
</li >
)
}
)
}
// ImageComponent
const ImageComponent = ({ hideButton }) => {
return (
<div>
{
!hideButton && (
<div>
<img src='icons/icon.png' />
<caption>Image </caption>
</div>
)
}
</div>
)
}
解决方案
您需要将状态提升到ButtonCommponent
和可访问的最父组件ImageComponent
。在这种情况下App Component
。但是,如果 ButtonComponent 呈现在App Component
树下的层次结构之外,则应使用上下文 API。
创建一个上下文并在其上共享状态,它将可以在应用程序级别访问。
//#1. create context.
export const HiddenContext = React.createContext(false);
//#2. create the provider and share the state with it.
function HiddenProvider({ children }) {
const [hideButton, setHideButton] = React.useState(false);
function handleClick() {
setHideButton(true);
}
return (
<HiddenContext.Provider value={{ hideButton, handleClick }}>
{children}
</HiddenContext.Provider>
);
}
//#3. render the provider component to the most top parent component
export default function App() {
const { hideButton } = React.useContext(HiddenContext);
return (
<HiddenProvider>
<div className="App">
<ImageComponent hideButton={hideButton} />
<OtherComponentRenderTheButton />
</div>
</HiddenProvider>
);
}
// other component that render the button
function OtherComponentRenderTheButton() {
return <ButtonComponent />;
}
//ButtonComponent
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
const ImageComponent = () => {
const { hideButton } = React.useContext(HiddenContext);
return (
<div>
{!hideButton && (
<React.Fragment>
<img src="icons/icon.png" alt="" />
<caption>Image </caption>
</React.Fragment>
)}
</div>
);
};
推荐阅读
- html - 页面适用于桌面,但页眉在移动设备上被截断
- sql - SQL SERVER - GROUP BY 条件(当数据不存在时)
- regex - 使用正则表达式从 Twitter 数据中提取“提及”的问题
- reactjs - 页面内容未显示在源代码中
- javascript - 为什么我的 onclick 属性在提交时不运行该功能?
- linux - 理解 ./ 在终端
- node.js - ISO 日如何在猫鼬中工作?
- javascript - Firefox 的 javascript 扩展 - querySelectorAll 和类名无法正常协同工作
- c# - 在 C# 中将 DataFrame 转换为 Excel
- reactjs - 在 next.js 中放置 yammer 共享按钮