Javascript 不要在react native中更改第二和第三级别中的已签入
为什么在下面的代码中,当发送ID时,第二级和第三级中选中对象的值不会更改为true或false!!! 但在第一轮中效果很好Javascript 不要在react native中更改第二和第三级别中的已签入,javascript,reactjs,react-native,Javascript,Reactjs,React Native,为什么在下面的代码中,当发送ID时,第二级和第三级中选中对象的值不会更改为true或false!!! 但在第一轮中效果很好 const terms = [ { "term_id":21, "name":"Clothing", "checked":false, "children":[ { "t
const terms = [
{
"term_id":21,
"name":"Clothing",
"checked":false,
"children":[
{
"term_id":24,
"name":"Accessories",
"checked":false,
"children":[
{
"term_id":25,
"name":"Scarf",
"checked":false,
"children":[
]
}
]
}
]
}
]
const setChecked = (data, id) => {
let newTerms = [];
data.map((item, key) => {
if (item.children && item.children.length) {
newTerms.push({
term_id: item.term_id,
name: item.name,
checked: item.term_id == id ? !item.checked : item.checked,
children: item.children ? item.children : [],
});
setChecked(item.children, id);
} else {
//item.checked = !item.checked;
newTerms.push({
term_id: item.term_id,
name: item.name,
checked: item.term_id == id ? !item.checked : item.checked,
children: item.children ? item.children : [],
});
}
});
return newTerms;
};
使用第一级ID=====>setChecked(术语,21)工作良好
但它不适用于第二级或第三级ID或更高版本====>setChecked(术语,25) 您必须将“newTerms”变量用作全局变量,因为函数的每次迭代都会为您的输出创建一个新的emtpy数组。是的,这是正确的,但还有另一个问题,并且会添加到数组的数量中!此函数的输出:[{“term_id”:21,“name”:“衣服”,“checked”:false,“children”:[{“term_id”:24,“name”:“附件”,“checked”:false,“children”:[{“term_id”:25,“name”:“Scarf”,“checked”:false,“children”:[]}],{“term_id”:24,“name”:“Accessories”,“checked”:false,“children”:[“Scarf”,“checked”:false,“children”:{“term_id”:25,“name”:“Scarf”,“checked”:true}]