是否可以根据Reactjs中实际布局的html来操作组件
Is it possible to manipulate components based on the actual laid out html in Reactjs?
所以我觉得React将是这项工作的错误工具(因为React在很大程度上是单向流),但我想我会问的。
假设我有以下HTML:
<div class="container">
<div class="module">
<div class="row">First Row</div>
<div class="row">Second Row</div>
<div class="row">Third Row</div>
</div>
</div>
现在假设容器类div的最大高度只允许它显示第一行和第二行,从而导致第三个流溢出。
当这种情况发生时,我想把溢出的行移到一个新的容器中,所以我有以下输出:
<div class="container">
<div class="module">
<div class="row">First Row</div>
<div class="row">Second Row</div>
</div>
</div>
<div class="container">
<div class="module">
<div class="row">Third Row</div>
</div>
</div>
在没有React的情况下,我计划通过将我的数据结构传递到render()
调用中,在第一个代码示例中创建html,然后遍历每个模块(然后是行),找出底部像素值是否大于容器的最大高度,如果是,则重新对其进行拆分。
我想在Reactjs中做到这一点,让每一行都成为模块组件中的一个组件,但我不确定是否有可能在React中有效地实现这一点。
要使其完全动态,需要逐个计算容器的高度和行的总高度。当行的总高度超过容器的高度时,我们就知道一个容器中可以容纳多少行,并且可以根据需要渲染任意多个容器,每个容器都有它可以处理的最大行数。
这可以使用顶级(有状态)组件上的回调来完成,该回调将传递给处理渲染单个行的组件,并在行组件安装后调用。然后,回调执行所需的计算,然后使用新值更新应用程序的状态,该值指示每个容器要呈现的最大行数。
以下是如何工作的大致概述:
var App = React.createClass({
getInitialState: function(){
return {
rowsToPlace: 1,
maxRowsPerContainer: 1,
calculateRows: true
}
},
cb: function(){
// passed down to Row component, handles calculating container/row heights
// updates state as required
},
render: function(){
// use state to incrementally render rows in to a single container
// until we know how many fit
return(
<div ClassName="app">
{containersToRender}
</div>
);
}
});
var Container = React.createClass({
render: function(){
return(
<div className="container">
<div ClassName="module">
{this.props.rows.map(function(row,i){
return <Row data={row} key={i} cb={this.props.cb} calcRows={this.props.calcRows}/>
}.bind(this))}
</div>
</div>
);
}
});
var Row = React.createClass({
render: function() {
return (
<div className="row">{this.props.data.rowNum}</div>
);
},
componentDidMount: function(){
if(this.props.calcRows) {
this.props.cb();
}
}
});
它并不优雅,滥用状态的程度让我感到局促不安,但这里有一个非常粗糙的js小提琴原型:http://jsfiddle.net/qhuksapm/
在要测试的CSS中更改.contain的最大高度。
至少它应该给你一些扩展和完善的东西。
相关文章:
- 在HTML/JavaScript中,有没有一种方法可以在图像开始加载时知道图像的最终布局尺寸
- 为什么jquery悬停在jsfiddle中可以工作,而在我的html布局中却不能
- 使用jquery为移动布局更改html层次结构
- 如何使用 Ajax 以 html 格式呈现没有布局的 Rails 操作
- 隐藏html页面中的某些字段以用于打印布局中的页眉/页脚
- HTML图像布局使用PHP变量,该变量是用JavaScript动态设置的〔o r…〕
- 是否可以根据Reactjs中实际布局的html来操作组件
- 将 HTML 文本内容拆分为组,同时保留 HTML 布局
- 布局阶段完成后显示 HTML 内容
- 如何使用pdfmake模仿HTML布局
- HTML 5视频在iPad上不起作用,iPad布局的侧面有黑色部分
- DOM 不代表 d3 强制布局的 html 结构
- 使用 JavaScript 进行基本的 HTML 布局
- 如何使用视图和布局生成带有 Grunt 的 HTML 页面
- 幻灯片显示css布局干扰html正文
- 保证动态生成的html页面的打印尺寸/布局
- JS/CSS/HTML中的动态布局
- 反转HTML布局
- 如何使用同位素为Knockout observableArray中的项目布局HTML元素
- 如何样式img在打印布局html