javascript - 如何获取 React.js 中选中复选框的数量?
问题描述
不久前我开始学习 React。决定制作某种“生活清单”作为我的初学者项目之一。我一直在核心中使用功能组件。
供参考:
- 我将 data.js 作为存储“动作”、“表情符号”和唯一 ID 的对象数组。
- 我将它导入到我的 App.js 中。
const App = () => {
//Looping over data
const items = data.map((item) => {
return (
<ChecklistItem action={item.action} emoji={item.emoji} key={item.id} />
);
});
return (
<>
<GlobalStyle />
<StyledHeading>Life Checklist</StyledHeading>
<StyledApp>{items}</StyledApp>
<h2>Overall number: {data.length}</h2>
</>
);
};
export default App;
这是我的<ChecklistItem/>
组件:
const ChecklistItem = ({ action, emoji }) => {
//State
const [isActive, setIsActive] = useState(false);
//Event Handlers
const changeHandler = () => {
setIsActive(!isActive);
};
return (
<StyledChecklistItem isActive={isActive}>
<input type="checkbox" checked={isActive} onChange={changeHandler} />
<StyledEmoji role="img">{emoji}</StyledEmoji>
<StyledCaption>{action}</StyledCaption>
</StyledChecklistItem>
);
};
export default ChecklistItem;
到目前为止,我对功能感到满意,但我需要显示在父组件中选择了多少“活动”清单项目,<App/>
例如“您已从 . 中选择 X 个项目{data.length}
。我该如何实现?
我假设我需要提升状态,但还不明白如何正确实施。
解决方案
你可以通过简单地创建一个状态来存储这个特定count
的活动项目来做到这一点。
为此,您需要将<App/>
组件更新为类似这样的内容
const App = () => {
const [activeItemsCount, setActiveItemsCount] = useState(0);
//Looping over data
const items = data.map((item, index) => {
return (
<ChecklistItem
key={index}
action={item.action}
emoji={item.emoji}
setActiveItemsCount={setActiveItemsCount}
/>
);
});
return (
<>
<h1>Life Checklist</h1>
<div>{items}</div>
<div>Active {activeItemsCount} </div>
<h2>Overall number: {data.length}</h2>
</>
);
};
export default App;
然后在您的<ChecklistItem />
组件中,您需要接受该setActiveItemsCount
功能,以便您可以更改activeItemsCount
.
import React, { useState, useEffect } from "react";
const ChecklistItem = ({ action, emoji, setActiveItemsCount }) => {
const [isActive, setIsActive] = useState(false);
const changeHandler = () => {
setIsActive(!isActive);
};
useEffect(() => {
if (!isActive) {
setActiveItemsCount((prevCount) => {
if (prevCount !== 0) {
return prevCount - 1;
}
return prevCount;
});
}
if (isActive) {
setActiveItemsCount((prevCount) => prevCount + 1);
}
}, [isActive, setActiveItemsCount]);
return <input type="checkbox" checked={isActive} onChange={changeHandler} />;
};
export default ChecklistItem;
通过使用useEffect
和检查isActive
和0
值,您可以通过按下复选框很好地增加或减少活动计数。
推荐阅读
- java - 为什么 Intent 在 Android 中不显示?
- list - 从列表中创建子列表并将所有子列表添加到 Flutter 的一个列表中
- java - 如果断路器打开,则回退到 Spring Cloud Gateway 中的另一条路由
- javascript - 使用键盘操作整数
- jenkins - Android10 平台:调用 Aidl 库 API 时出现 NoClassDefFoundError
- types - 尽管有模式匹配,但 Agda 并未消除目标中的子句
- python - 如何仅从时间戳中获取时间?
- javascript - 我该如何循环这个 JSON 数据
- javascript - 在 JavaScript 中为数组中的每个对象添加成功率
- android - 更改 TextView 中可绘制图标的位置