javascript - 值更改时反应钩子复选框未呈现
问题描述
当我从服务器获取数据并使用新数据设置父组件时,此子组件复选框没有更新。
子组件
const UrlInput = ({showCheckBox, checkBoxValue, onCheckBoxChange}) => {
const [checkBoxVal, setCheckBoxVal] = useState(_.isUndefined(checkBoxValue) ? false : checkBoxValue);
useEffect(() => {
setCheckBoxVal(checkBoxValue)
console.log(checkBoxValue)
}, [checkBoxValue, checkBoxVal]);
return (
<div className="card">
<div className="card-body">
<div className="form-group">
<div className="form-group col-6">
<AvInput type="checkbox" name="urlCheckBox" onChange={onCheckBoxChange} value={checkBoxVal}/> Title is clickable
</div>
</div>
</div>
</div>
);
};
export default UrlInput;
解决方案
在这种情况下不需要 useEffect ,因为您将复选框的值从父级传递给子级,并且您已经在父级中编写了 onChange 函数,因此每当您单击复选框时,状态“checkBoxValue”的值将被更改,它将重新渲染子组件。只要确保您将 event.target.checked 设置为孩子的状态即可。您也可以替换此行:- const [checkBoxVal, setCheckBoxVal] = useState(_.isUndefined(checkBoxValue) ? false : checkBoxValue);
有了这个:- const [checkBoxVal, setCheckBoxVal] = useState(checkBoxValue ? checkBoxValue : false);
推荐阅读
- css - 如何在所有平台(手机、平板电脑、台式机)上使用引导网格系统?
- sql - 从联结表中获取数据作为唯一记录的值列表
- html - 如何使网页内容的宽度和高度适应窗口的宽度和高度
- vector - Idris - 自定义相关数据类型的映射函数失败
- angular - @angular/elements 如何在休息调用结束时更新我的自定义元素?
- vba - mac 上的 VBA Shell 尝试在文本编辑器中打开 .sh 文件,而不是执行它
- excel - 包含存储在 IF 公式中的单元格中的文件路径的动态单元格指针
- android - 使用一个实体的两个表
- azure-automation - 如何使用 Azure Runbooks 按计划重新启动 Azure Web 应用程序
- coin-or-cbc - 构建 CoinOR 时出错