reactjs - 函数在钩子中运行一次
问题描述
我有一个这样的钩子:
export default function AddSections ({ onCheckItem }) {
const checkItem = (item) => {
console.log('check')
}
return (
<div>
<Checkbox
className="section_item"
key={index}
id={section.name}
name="add-sections"
type="radio"
label={'section.label'}
value={'section.name'}
onChange={val => checkItem(item)}
/>
</div>
)
}
当我第一次选中复选框时,函数返回 console.log,当我尝试撤消检查时它永远不会工作
解决方案
问题是您已将 Checkbox 类型定义为,radio
并且您正在使用不受控制的输入,因此它不允许您切换。
你有两个解决方案
- 将类型更改为
checkbox
示例代码:
export default function AddSections ({ onCheckItem }) {
const checkItem = (item) => {
console.log('check')
}
return (
<div>
<Checkbox
className="section_item"
key={index}
id={section.name}
name="add-sections"
type="checkbox"
label={'section.label'}
value={'section.name'}
onChange={val => checkItem(item)}
/>
</div>
)
}
- 使用受控输入
示例代码
export default function AddSections ({ onCheckItem }) {
const [checked, setChecked] = useState('');
const checkItem = (item) => {
setChecked(checked => (checked == item? '': item));
}
return (
<div>
<Checkbox
className="section_item"
key={index}
id={section.name}
name="add-sections"
checked={checked === item}
type="radio"
label={'section.label'}
value={'section.name'}
onChange={val => checkItem(item)}
/>
</div>
)
}
推荐阅读
- amazon-cloudwatch - HTTP 请求上的 CloudWatch 事件触发器
- google-bigquery - bigqueryoperator 是 write_truncate 1 个事务或 2 个事务
- r - R.matlab 库中的 setFunction 执行不正确?
- bash - 有什么方法可以使用 az cli 按标签过滤 Azure 订阅?
- java - 如何用 dto 保存双向实体
- python - python/scapy - 数据包已发送但无法接收
- node.js - 为什么 NodeJS 之前的构建显示比旧版本少?
- asp.net - Azure AD - 调用 Web API 的 WebForms Web 应用程序
- reactjs - 反应自定义颜色图表
- javascript - GAME_WIDTH、GAME_HEIGHT 和 gameWidth、gameHeight