reactjs - 从子组件调用时回调函数不起作用
问题描述
我想从子组件更改父状态。我认为我的代码正确但不起作用。
const [newValidate, setNewValidate] = useState<Array<boolean>>(new Array(checkList.length).fill(false));
这是我的父母状态
{checkList.map((row, index) => {
const changeValidate = () => {
setNewValidate(newValidate.splice(index, 1, true));
} return ( <>
<ConfirmButton callBack={changeValidate} />
<RejectButton callBack={changeValidate} />
</>)})}
这是我在父组件中的地图
export function ConfirmButton(props: ButtonProps) {
const { callBack } = props;
return (
<>
<IconButton
onClick={() => callBack()}
className={classes.confirm}
aria-label="confirm check"
>
<CheckIcon />
</IconButton>
</>
);
}
这是我的子组件
解决方案
问题
该方法通过删除或替换现有元素和/或在适当位置
splice()
添加新元素来更改数组的内容。
const changeValidate = () => {
setNewValidate(newValidate.splice(index, 1, true)); // <-- mutation
}
解决方案
如果您尝试更新特定索引处的值,则需要浅拷贝整个状态数组。将前一个状态映射到下一个状态,当映射索引i
匹配所附index
时返回更新值,否则返回现有值。我建议还使用功能状态更新,因为下一个状态数组取决于前一个状态数组。
const changeValidate = () => {
setNewValidate(
newValidate => newValidate.map((el, i) => i === index ? true : el
);
}
推荐阅读
- javascript - 如何按关键日期对对象进行排序?
- python - 我怎样才能使矩形不会从平台上掉下来?无需使代码过于高级或复杂(python 3 with pygame)
- r - 在黑白图像中查找最大的斑点
- reactjs - 为什么 react hook 与 fetch api 一起使用时会抛出 act 错误?
- php - PDO 准备好的语句似乎忽略了 HAVING 子句
- c# - Unity - 检查器中结构的自定义绘图
- javascript - 构建 noSQL 数据库最实用的方法是什么?
- javascript - highcharts - 不使用 ajax 创建
- dotnetnuke - 即使我有正则表达式设置,DNN 也重写和切断查询字符串
- powershell - 在可用变量中获取文件夹的内容