首页 > 解决方案 > 我不知道为什么我变得不确定。我怎样才能使这项工作?

问题描述

我正在寻找一个用户,当我找到它时,我想将其设置为配置状态。现在,当我在子数组中搜索时,我收到一个类型错误,提示“无法读取未定义的属性 'children'”。为什么会这样?我该如何解决?如果没有用户名,我可以设置配置状态。此外,如果我放置一个 console.log 或更改某些内容并保存,我注意到页面重新加载并且我的搜索对象已设置,即使之前有人说无法读取未定义的属性“孩子”。
这里是代码。

  const [config, setConfig] = useState({});



 const makeTree = (users) => {
    let tree = {children:[]};
    for (const person of users) {
      if (!person.report) {
        tree = { ...person, ...tree };
      } else {
        if (tree.name === person.report) {
          tree.children.push(person);
        } else {
          tree.children?.forEach(child => {
            if (child.name === person.report) {
              child.children = [];
              child.children.push(person)
            }
          })
        }
      }
    }

    return tree;
  };

  const searchInChildren = (children, name) => {
    for (let i = 0; i<children.length; i++) {
      
      if (children[i]?.name === name) {
        setConfig(getConfig(children[i]));
      }
       else if (children[i] && children[i].children && children[i].children.length > 0) {
        searchInChildren(children[i].children, name)
      } else {
        console.log("not found!")
      }
    }
  };

  useEffect(() => {
    fetch("http://localhost:4000/schema")
      .then((response) => response.json())
      .then((data) => {
        if (username) {
          const treeObj = {...makeTree(data)};
          console.log("tree", treeObj);
          const regex = new RegExp(username, "gi");
          for (let i = 0; i < data.length; i++) {
            if (regex.test(data[i].name)) {
              if (treeObj.name === data[i].name) {
                setConfig(getConfig(treeObj))
              } else {
                console.log("treeObj.children",treeObj.children, data[i] );
                searchInChildren(treeObj.children, data[i].name)
              }

            }
          }
        } else {
          setConfig(getConfig(makeTree(data)));
        }
        if(deleteSearch){
            console.log("hi",deleteSearch);
            setConfig(getConfig(makeTree(data)));
        }
      });
  }, [username, deleteSearch])

;

标签: javascriptarraysreactjsjavascript-objects

解决方案


推荐阅读