【问题标题】:Can we modify the div once component renders in react?一旦组件在 react 中渲染,我们可以修改 div 吗?
【发布时间】:2019-08-31 00:26:39
【问题描述】:

我正在尝试找到一种解决方案来修改 div 的高度,以便根据它将自动增长的元素数量来做出反应。

所以,为了做同样的事情,我选择了 jquery

     ul.each(function() {
        const self = $(this);
        const { listCount, ulCount } = getListItemsCount(self);
        const ruleHeight = listCount * listDefaultHeight;
        const children = $(self).children();

        /* Swapping of elements to adjust the heights */
        if (children.length - 1 === 2 && ulCount === 1) {
          if ($(children[2]).data('count') > $(children[1]).data('count')) {
            $($(self).children()[2]).insertBefore($($(self).children()[1]));
            //ruleHeight += 25;
          }
        }

        $(self)
          .find('div')
          .css({ height: `${ruleHeight}px` });
      });

上面的代码发生在componentDidMount()内部。我在这里这样做的原因是,我们不确定我们需要增加多少高度,因为 div 位置是绝对的,并且还取决于第一级内容,我们正在交换 div 以及高级概述。

蓝色和ping是一个绝对div,其高度相应增长,如果第一级数据较少,第二级有嵌套和更多列表项,高度没有调整,所以交换div和它的工作。

这里的问题是:用 jquery 处理这个问题是否正确? React DOM 现在没有更新?如何更新react dom,假设调用render方法,写的jquery代码会不会过时?

是否有可能使用 flex 自动调整高度,而不使用 jquery 进行绝对位置或仅通过 css 来调整高度?

请指导最佳实践来做同样的事情

【问题讨论】:

  • (99%)正确的做法是在使用 React 时不使用 jQuery 来修改 DOM。如果您使用 react 来构建视图,请使用它
  • 我明白,我没有找到任何解决方案,因此暂时使用它,更新我的问题以检查是否有任何替代解决方案来解决我面临的问题
  • 第 1 步:停止使用 jquery,然后第 2 步:将大小调整逻辑写入 react 组件,根据您对内容的了解设置适当的 CSS 类。重要的部分是立即停止使用 jQuery,因为使用 React 意味着 React 拥有 UI:它不是浏览器内容,而是恰好使用浏览器呈现自身的 React 内容。考虑它生成的 DOM 禁区:它是禁区,不要试图触摸它。如果你需要改变它的渲染方式,那么让 React 基于 its 代码来做这件事。
  • 我同意并因此在这里发布以找到正确的解决方案,我们可以只用 css 和 flex 处理这个问题???

标签: javascript jquery html css reactjs


【解决方案1】:

我建议不要改用jquery,写一个函数来计算componentDidMount中div的高度,并在render方法中设置div的高度。

这是一个例子

componentWillMount() {

       this.setDivHeight();
  }


return () {

       render(
          <div style={{height: this.state.divHeight}}>

          </div>
        )
  }

这个仅供参考,你必须调用一个函数来设置状态divHeight的改变值来重新渲染组件,并且div高度也会在每次渲染时改变。还会建议 JSX 中的用户对您的组件进行编码。关于JSX的提示

【讨论】:

  • 我喜欢你的想法,但它不符合我的要求,因为我不知道我需要更新多少个 div,因为它在递归函数中
猜你喜欢
  • 2020-03-14
  • 2021-12-06
  • 2017-11-09
  • 2020-08-28
  • 1970-01-01
  • 2015-11-26
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多