当前位置: 首页 > 面试题库 >

如何在reactjs中管理树组件中的状态

郑琦
2023-03-14
问题内容

我已经为此苦苦挣扎了几天,试图找出“反应”的方式。

基本上,我有一棵树,一个可以任意嵌套的列表列表(列表),我想要一个可以显示此内容并允许重新排列的组件。

这是我的数据:

var data = [{
      id: 1
    }, {
      id: 2, children: [
        {
          id: 3, children: [{id: 6}]
        }, {
          id: 4
        }, {
          id: 5
        }]
    }]

我的第一步是只具有一个“树”组件,该组件在其render函数中构建DOM元素的嵌套列表(请参见此处的代码)。对于少数元素,这实际上效果很好,但是我希望能够支持数百个元素,并且当在树中移动元素时,重新渲染的成本非常高(当有数百个元素时,约为600毫秒)元素)。

因此,我认为我将拥有树的每个“节点”,因为它是该组件的自己的实例。但是, 这是我的问题(很长的介绍很抱歉):

每个节点是否应该从中央“数据库”动态查询列表的子代ID,并将其存储在状态中?还是最顶层的节点应该加载整棵树并通过道具传递所有内容?

我仍在努力思考如何处理和分散状态和道具。

谢谢


问题答案:

我想用React尝试树结构,并想出一个简单的组件,当您单击时可以隐藏子树<h5>。一切都是一个TreeNode。这与您的想法类似吗?

您可以在此JSFiddle中查看它的运行情况:http :
//jsfiddle.net/ssorallen/XX8mw/

TreeNode.jsx

var TreeNode = React.createClass({
  getInitialState: function() {
    return {
      visible: true
    };
  },
  render: function() {
    var childNodes;
    if (this.props.node.childNodes != null) {
      childNodes = this.props.node.childNodes.map(function(node, index) {
        return <li key={index}><TreeNode node={node} /></li>
      });
    }

    var style = {};
    if (!this.state.visible) {
      style.display = "none";
    }

    return (
      <div>
        <h5 onClick={this.toggle}>
          {this.props.node.title}
        </h5>
        <ul style={style}>
          {childNodes}
        </ul>
      </div>
    );
  },
  toggle: function() {
    this.setState({visible: !this.state.visible});
  }
});

bootstrap.jsx

var tree = {
  title: "howdy",
  childNodes: [
    {title: "bobby"},
    {title: "suzie", childNodes: [
      {title: "puppy", childNodes: [
        {title: "dog house"}
      ]},
      {title: "cherry tree"}
    ]}
  ]
};

React.render(
  <TreeNode node={tree} />,
  document.getElementById("tree")
);


 类似资料:
  • 我用React构建了3个组件。他们是: 包装器 列表 列表项 如何管理单击的复选框的状态。我想Wrapper知道哪些复选框被选中。

  • 我正在将父组件的状态从父组件传递到子组件。在子组件中,我有一个不同的状态。我正在对子组件的状态执行一些操作,并且结果必须添加到父组件的状态。因此,在我的父组件中,我编写了一个回调函数,该函数将更新父组件的状态。代码为: 因此,这个函数随后作为道具传递给子组件: 然后在我的子组件中,我试图实现回调函数为: 但这并没有达到预期效果。这是正确的方法吗?有人能帮我吗? 我试图通过实现这里提供的解决方案来解

  • 问题内容: 如果我有一个在其状态上设置了属性的react组件: 是否可以从此处删除? 该replaceState方法看起来像明显的方法来尝试,但它至今已贬值。 问题答案: 您可以设置到,像这样 更新资料 先前的解决方案只是从中删除价值而 存在的技能,如果您需要从中完全删除密钥,则可能的解决方案之一可以是与一位父母同住 ,就像这样

  • 如何使事件在ReactJS中工作?它应该在按下回车键(keyCode=13)时发出警报。

  • 我目前有一个类组件和一个函数组件在我的主组件 以下是的代码段: 类组件 功能部件 因此,我想做的是通过按钮的onClick操作,从功能组件更改类组件的状态。我怎样才能完成任务?

  • 作为帮助我学习ReactJS的一种方式,我正在设置一些应该很容易的东西,但事实证明对我来说有些棘手。 我想在ReactJS中设置一些托管复选框组。在HTML中,复选框“字段”实际上由许多共享公共名称属性的input type=“checkbox”元素组成。据我所知,这只是一种UI元素,应该适合ReactJS的组合特性。 我有两个组件: 首先,Checkbox Field是针对复选框组中的每个单独条

  • 我需要使用父组件中子组件内部的状态值。 组成部分: 这是父组件:

  • 问题内容: 我知道我可以在渲染组件时通过。我也知道这种方法。但是问题是,由于我的组件不知道它的初始状态,并没有太大帮助。我做。所以我想在渲染时通过它。 这样的东西(伪代码): 我知道我可以使用a 作为初始状态,但这闻起来像是反模式。 我该怎么办? 编辑清晰度 想象一下我有一个组件。到我第一次渲染它时,初始状态对应于数据库中当前注释的快照。当用户包含评论时,此列表将更改,这就是为什么它应该是a 而不