css - 通过添加元素 React.js 的数量来更改 div 元素的高度

我正在使用 React.js 制作一个应用程序。我有一个元素 list 。元素列表是可编辑的。

我想在元素列表旁边添加一个 title 元素,并且 title 元素的高度应该随着元素数量的增加或减少而改变。

图片

如果元素数量减少到 3,标题元素(建议和常见问题)的高度应该缩短。如果增加到5,高度应该加宽。

我怎样才能实现这个功能?我尝试使用内联样式但我失败了..

<div className="titleElement" style={height: this.state.questionItem.length * 20px }></div>

索引.js

export default class List extends React.Component {
constructor(props){
    super(props);
    this.state={
        questionItem
    };
}

createItem(item){
    this.state.questionItem.unshift({
        item : item,
    });
    this.setState({
        questionItem : this.state.questionItem
    });
}

findItem(item) {
    return this.state.questionItem.filter((element) => element.item === item)[0];
}

toggleComplete(item){
    let selectedItem = this.findItem(item);
    selectedItem.completed = !selectedItem.completed;
    this.setState({ questionItem : this.state.questionItem });
}

saveItem(oldItem, newItem) {
    let selectedItem = this.findItem(oldItem);
    selectedItem.item = newItem;
    this.setState({ questionItem : this.state.questionItem });
    console.log(this.state.questionItem)
}

deleteItem(item) {
    let index = this.state.questionItem.map(element => element.item).indexOf(item);
    this.state.questionItem.splice(index, 1);
    this.setState({ questionItem : this.state.questionItem });
}

render() {
    return (
    <div className="list">
    <div className="titleElement" style={height: this.state.questionItem.length * 20px }></div>
    <QuestionList questionItem={this.state.questionItem} deleteItem={this.deleteItem.bind(this)}  saveItem={this.saveItem.bind(this)} toggleComplete={this.toggleComplete.bind(this)} />
    <CreateItem questionItem={this.state.questionItem} createItem={this.createItem.bind(this)} />
    </div>);
}
}

最佳答案

我认为您手动完成了太多工作。你应该看看flexbox并让 CSS 自动为您处理高度调整。最终结果会是这样的(还没有测试过,只是给你一个概念性的想法):

render() {
    return (
    <div className="list" style={{"display": "flex";}}>
        <div className="titleElement" style={{"flex": 1}}></div>
        <div style={{"flex": 5; "display": "flex"; "flex-direction": "column"}}>
            <QuestionList questionItem={this.state.questionItem} deleteItem={this.deleteItem.bind(this)}  saveItem={this.saveItem.bind(this)} toggleComplete={this.toggleComplete.bind(this)} />
            <CreateItem questionItem={this.state.questionItem} createItem={this.createItem.bind(this)} />
        </div>
    </div>);
}

外层 div 设置了 display: flex 来启用 flex box,然后你可以使用 flex: 1 flex: 5 在子 div 中设置以获得正确的宽度。

然后我会在 QuestionListCreateItem 周围添加包装 div ,这样您就可以使它们垂直/按列显示(使用 display: flexflex-direction: column 样式)。

https://stackoverflow.com/questions/46345188/

相关文章:

oauth - 我如何测试是否已获得管理员同意

php - Laravel - 使用 Query Builder 函数传递变量

julia - 如何更改 Julia 中的最大递归深度?

python-2.7 - 如何删除回复键盘( Telegram Bot )

regex - 如何提取ansible变量中的最后一个数字

bash - 在 MAC OSX 中比较 Bash 中的两个日期

regex - RegExp 字符类中的范围乱序

c# - 可访问性不一致 : field type is less accessible than

apache-kafka - Zookeeper 安装在 Windows 10 上不起作用

python-3.x - Python KafkaConsumer 从时间戳开始消费消息