Javascript 过滤器状态不为';在反应器中不能正常工作
我的父组件从其子组件检索选中的输入值。 所以我有一个函数(handleChecked),它接受两个参数:一个是“id”,另一个是“isChecked”: 我的职能应该做什么: 1-从单击的输入中获取id和已检查状态, 2-检查状态是否存在重复id, 3-如果存在,将其拆下, 4-拯救国家, 5-如果选中,则将id存储在临时数组中, 6-保存新状态 它的作用是:Javascript 过滤器状态不为';在反应器中不能正常工作,javascript,reactjs,react-hooks,react-state-management,Javascript,Reactjs,React Hooks,React State Management,我的父组件从其子组件检索选中的输入值。 所以我有一个函数(handleChecked),它接受两个参数:一个是“id”,另一个是“isChecked”: 我的职能应该做什么: 1-从单击的输入中获取id和已检查状态, 2-检查状态是否存在重复id, 3-如果存在,将其拆下, 4-拯救国家, 5-如果选中,则将id存储在临时数组中, 6-保存新状态 它的作用是: 好的,除了向新状态添加值之外,上面所有的任务都完成了 当我单击一个新的输入时,父级的“checkedValues”状态为空,从零开始
- 好的,除了向新状态添加值之外,上面所有的任务都完成了
它可以工作,唯一的区别是它在同一个组件中,使用html表单事件,而不是传统道具 最后,我在3中解构了我的组件:
checkedValues
状态的父组件,该组件调用“ListItem”子组件,将数据和状态作为道具传递李>
handleCheck
函数并映射要显示的数据,将信息和函数传递给每个映射的子项handleCheck
函数+处理自己的isChecked
状态,以根据其状态动态修改CSS这个答案当然是根据我自己的目的和需要定制的。这不是最一般的,但它回答了我的问题,也许可以帮助别人。再次感谢@ChrisG提供的帮助您正在呼叫
setCheckedValues(newCheckedValues)
两次,一次不带id
通过旧数组,然后再次带id
进入。状态更新是异步的;如果。。。先按,然后调用setCheckedValues(newCheckedValues)代码>最后一次。嗨,克里斯,谢谢你的回答。我确实想到了这一点,但不幸的是,这并没有改变问题。起初我认为过滤函数是问题所在,但它完成了它的工作:如果单击相同的输入,isChecked
将变为false,并且该值将从状态中删除。所以我仍然有我的“加法”问题。我在看沙箱,它似乎工作得很好?编辑:没有读最后一句话,给我一秒钟好吧,这是我的解决方案:那么解决方案就是将函数传递给孩子?我不确定您是否可以使用状态设置器作为道具…除非父级和子级必须位于同一文件/组件中?我会尽快处理,然后告诉你。
const handleChecked = useCallback(({ id, isChecked }) => {
const newCheckedValues = checkedValues.filter(current => current !== id);
setCheckedValues(newCheckedValues);
if (isChecked) {
newCheckedValues.push(id);
setCheckedValues(newCheckedValues);
}
}, [checkedValues]);