reactjs - 如何在单击时更改特定组件的状态,在 react js 中使用 useState?
问题描述
在 react js 中使用类似的功能组件时,我遇到了一个问题。每当我单击此图标时,它都会像这样打开与之相关的每个组件,
但我想要的是只为单击的组件打开组件。
我怎样才能做到这一点?
我在这里使用 useState 来实现此功能
并且为每个组件设置不同的状态在这里没有意义。
代码
这是当前功能的一个简单示例
import React, { useState } from "react";
function Test1() {
const [body, setBody] = useState(false);
const showHideBody = () => {
setBody(!body);
};
return (
<div>
<div>I am header</div>
{body ? <div className="body__container">I am body</div> : null}
<button onClick={showHideBody}>{body ? "Hide body" : "Show Body"}</button>
{body ? <div className="body__container">I am body</div> : null}
<button onClick={showHideBody}>{body ? "Hide body" : "Show Body"}</button>
{body ? <div className="body__container">I am body</div> : null}
<button onClick={showHideBody}>{body ? "Hide body" : "Show Body"}</button>
{body ? <div className="body__container">I am body</div> : null}
<button onClick={showHideBody}>{body ? "Hide body" : "Show Body"}</button>
{body ? <div className="body__container">I am body</div> : null}
<button onClick={showHideBody}>{body ? "Hide body" : "Show Body"}</button>
{body ? <div className="body__container">I am body</div> : null}
<button onClick={showHideBody}>{body ? "Hide body" : "Show Body"}</button>
<div>I am footer</div>
</div>
);
}
export default Test1;
解决方案
您应该为组件创建一个单独的组件类型,每个组件都有自己的状态:
import React, { useState } from "react";
function Component() {
const [body, setBody] = useState(false);
const showHideBody = () => {
setBody(!body);
};
return (
<div>
{body ? <div className="body__container">I am body</div> : null}
<button onClick={showHideBody}>{body ? "Hide body" : "Show Body"}</button>
</div>
);
}
function Test1() {
return (
<div>
<div>I am header</div>
<Component />
<Component />
<Component />
<Component />
<Component />
<Component />
<div>I am footer</div>
</div>
);
}
export default Test1;
推荐阅读
- haskell - RebindableSyntax 不能按预期工作
- java - onBindViewHolder 重复结果
- c# - ASP.Net MVC 更新实体遇到“无法更新实体”。
- python - 如何跳转到开发服务器中的 Python 调试器?
- typescript - 如何在使用 Compiler API 进行类型检查之前转换 TypeScript 代码
- excel - 根据另一个单元格值添加或删除行
- c++ - 有没有办法从构造函数存储模板变量以供以后使用?(c++)
- gatsby - Gatsby - 无法获取此 StaticQuery 的结果
- r - 在 Python 中合并几个不同大小的 daraframes 而不会丢失列
- node.js - 将 http 请求从 Angular 8 发送到 Express.js 后端 docker 容器时,跨域请求被阻止(原因:CORS 请求未成功)