【发布时间】: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