微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用递归函数动态更改嵌套状态?

如何解决如何使用递归函数动态更改嵌套状态?

我对反应很陌生,我想学习如何动态更新深层嵌套对象中的状态。

假设我有一个深层嵌套对象:

 const initialState = [
      { a: [{ a: [{ a: [{ a: 5 },{ b: 4 }] },{ b: 3 }] },{ b: 2 }] },{ b: 1 },];

我想在不同的按钮和 onClick 中呈现每个“b”值以增加它的值。 像这样的东西: buttons image

为此,我想使用递归函数。 有了这个,我可以显示所有项目,但我不知道如何更新按钮中每个嵌套状态的状态。

到目前为止我的代码是:

function RecursiveComponent({ nestedobject,setnestedobject }) { 

      function handleIncrement() { //this event handler it's not correct for updating the nested states,setnestedobject((prevstate) => {
          prevstate[1].b = prevstate[1].b + 1;
          return { ...prevstate };
        });
      }

      return (
        <>
          {nestedobject && (
            <div>
              <button onClick={handleIncrement}>{nestedobject[1].b}</button>
              {typeof nestedobject[0].a === "object" && (
                <RecursiveComponent
                  nestedobject={nestedobject[0].a}
                  setnestedobject={setnestedobject}
                />
              )}
            </div>
          )}
        </>
      );
    }
    
    function App() {
      const [nestedobject,setnestedobject] = useState(initialState);
    
      function handleIncrement() {
        setnestedobject((prevstate) => {
          prevstate[1].b = prevstate[1].b + 1;
          return { ...prevstate };
        });
      }
    
      return (
        <>
          {nestedobject && (
            <button onClick={handleIncrement}>{nestedobject[1].b}</button>
          )}
          {nestedobject && typeof nestedobject[0].a === "object" && (
            <RecursiveComponent
              nestedobject={nestedobject[0].a}
              setnestedobject={setnestedobject}
            />
          )}
        </>
      );
    }

所以我有两个问题:

1.如何动态更新每个嵌套状态?

2.为什么当我点击第一个事件时它会增加 1,但之后再次点击时它会增加 2?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。