React 面板在未直接加载的选项卡中被压扁 - React Equalizer
React panel is squashed in tab that is not directly loaded - React Equalizer
我正在使用 React、Redux 和 Bootstrap 设置。我正在构建具有不同选项卡的图书网站,其中选项卡是通过不同选项卡具有相同 ID 的项目(书籍)。我所有的数据都存储在商店中并像这样传递到面板:TabsContainer(在这里我过滤书籍并通过道具传递)-> [所有,收藏夹,...]->书籍列表(对于每个)-> 书(都一样)。
很难 post 所有代码和基本概念,因为我不知道哪里出了问题。我改为 post 结果。
这是可以的地方。我也可以通过调整 window 的大小来修复这个错误,但它会影响其他 4 个选项卡。
这显然是一个错误。当我离开初始选项卡时,总是会出现错误。
有什么问题吗?我应该设置不同的键吗?但如果我理解正确的话,反应会做必要的渲染。
更新 发现罪魁祸首是我用来匹配列大小(bootstrap 响应)的反应均衡器,以便按钮行出现在机器人上。我认为这与 React 不兼容有关。 所以现在的问题是如何将按钮行放在面板的底部。
<div className="col-md-12 col-lg-6">
<div className="panel panel-default no-padding">
<div className="panel-body contentRow" style={book_item.mainContainer}>
<Equalizer>
<div className="col-xs-12 col-sm-6" style={book_item.imageContainer}>
<div>
<FavoriteIcon reading={reading} style={book_item.favorites}
onFavoriteChanged={this.onFavoriteChanged}/>
<Link to={"readings/"+reading.id+"/edit"} params={{id: reading.id}} style={book_item.imageLink}>
<img
src={'http://smartbooky.hopto.org/media/images/books/' + reading.book.id + '.jpg'}
height="210px" style={book_item.bookImage}/>
</Link>
</div>
</div>
<div className="col-xs-12 col-sm-6" style={book_item.textContainer}>
<div className="bookTitle">
<strong>{reading.book.title}</strong><br/>
</div>
<div className="bookSubtitle">
{(() => {
if (reading.book.subtitle)
return (<div><em>{reading.book.subtitle}</em> <br/></div>);
})()}
</div>
<div className="bookAuthors">
<div>{authors ? authors : "Unknown author"}<br/></div>
</div>
<div className="bookDescription hidden-xs" style={book_item.bookDescription}>
{truncatedDescription.replace(/<\/?[^>]+(>|$)/g, "")}
</div>
<div className="bookTags hidden-xs row" style={book_item.bookTags}>
{reading.book.genre ? BookCard.renderTags(reading.book.genre) : void(0)}
</div>
<div className="buttonRow"
style={window.innerHeight > 400 ? book_item.buttonRow : void(0)}>
<div className="col-xs-4">
<Button icon="glyphicon glyphicon-remove" name="Remove" kind="primary"
handleClick={this.onReadingDelete} style={book_item.buttonRemove} />
</div>
<div className="col-xs-4">
<Button icon="glyphicon glyphicon-th-list" name="Shelf" kind="primary"/>
</div>
<div className="col-xs-4">
<Button icon="glyphicon glyphicon-edit" name="Edit" kind="primary"/>
</div>
</div>
</div>
</Equalizer>
</div>
</div>
</div>
我想在回答这个问题之前,我们需要了解一些事情:
1. 这些 Bootstrap 选项卡是否在它们之间的切换方面实现了某种 non-React JavaScript?我知道 Bootstrap 不仅提供了 CSS 文件用于安装,而且还可以提供一些 JavaScript 来使用它的一些组件。
2. 我猜在您发布的图片中,您是从“收藏夹”选项卡导航到“全部”选项卡?如果是这样,“全部”选项卡应该显示什么? (有可能它实际上正在渲染预期的元素,只是 css 让它看起来不对。)
3.如果上面两点不是问题的根源,那么我们就需要看一些代码,至少是涉及到的组件的render函数,以及他们的状态。
react-equalizer
的创建者。这可能是在加载图像之前发生的均衡问题。我刚刚发布了一个解决此问题的新版本 (1.0.5)。
这是一个带有 react-bootstrap
个选项卡的工作示例:
http://jsbin.com/mayanakiqo/edit?js,output
class MyComponent extends React.Component {
render() {
let colStyles = {
float: 'left',
width: '50%',
padding: '10px',
background: '#ddd',
border: '4px solid white',
boxSizing: 'border-box'
}
return (
<div>
<Tabs defaultActiveKey={2}>
<Tab eventKey={1} title="Tab 1">
<Equalizer byRow={false}>
<div style={colStyles}>
<img src="http://placehold.it/200x300" />
</div>
<div style={colStyles}>
Test content
</div>
</Equalizer>
</Tab>
<Tab eventKey={2} title="Tab 2">
<Equalizer byRow={false}>
<div style={colStyles}>
<img src="http://placehold.it/200x300" />
</div>
<div style={colStyles}>
Test content
</div>
</Equalizer>
</Tab>
<Tab eventKey={3} title="Tab 3">
<Equalizer byRow={false}>
<div style={colStyles}>
<img src="http://placehold.it/200x300" />
</div>
<div style={colStyles}>
Test content
</div>
</Equalizer>
</Tab>
</Tabs>
</div>
)
}
}
另一种选择是使用 flexbox 来均衡高度,例如参见 [=14=],但这取决于您需要支持的浏览器。
我正在使用 React、Redux 和 Bootstrap 设置。我正在构建具有不同选项卡的图书网站,其中选项卡是通过不同选项卡具有相同 ID 的项目(书籍)。我所有的数据都存储在商店中并像这样传递到面板:TabsContainer(在这里我过滤书籍并通过道具传递)-> [所有,收藏夹,...]->书籍列表(对于每个)-> 书(都一样)。
很难 post 所有代码和基本概念,因为我不知道哪里出了问题。我改为 post 结果。
这是可以的地方。我也可以通过调整 window 的大小来修复这个错误,但它会影响其他 4 个选项卡。
这显然是一个错误。当我离开初始选项卡时,总是会出现错误。
有什么问题吗?我应该设置不同的键吗?但如果我理解正确的话,反应会做必要的渲染。
更新 发现罪魁祸首是我用来匹配列大小(bootstrap 响应)的反应均衡器,以便按钮行出现在机器人上。我认为这与 React 不兼容有关。 所以现在的问题是如何将按钮行放在面板的底部。
<div className="col-md-12 col-lg-6">
<div className="panel panel-default no-padding">
<div className="panel-body contentRow" style={book_item.mainContainer}>
<Equalizer>
<div className="col-xs-12 col-sm-6" style={book_item.imageContainer}>
<div>
<FavoriteIcon reading={reading} style={book_item.favorites}
onFavoriteChanged={this.onFavoriteChanged}/>
<Link to={"readings/"+reading.id+"/edit"} params={{id: reading.id}} style={book_item.imageLink}>
<img
src={'http://smartbooky.hopto.org/media/images/books/' + reading.book.id + '.jpg'}
height="210px" style={book_item.bookImage}/>
</Link>
</div>
</div>
<div className="col-xs-12 col-sm-6" style={book_item.textContainer}>
<div className="bookTitle">
<strong>{reading.book.title}</strong><br/>
</div>
<div className="bookSubtitle">
{(() => {
if (reading.book.subtitle)
return (<div><em>{reading.book.subtitle}</em> <br/></div>);
})()}
</div>
<div className="bookAuthors">
<div>{authors ? authors : "Unknown author"}<br/></div>
</div>
<div className="bookDescription hidden-xs" style={book_item.bookDescription}>
{truncatedDescription.replace(/<\/?[^>]+(>|$)/g, "")}
</div>
<div className="bookTags hidden-xs row" style={book_item.bookTags}>
{reading.book.genre ? BookCard.renderTags(reading.book.genre) : void(0)}
</div>
<div className="buttonRow"
style={window.innerHeight > 400 ? book_item.buttonRow : void(0)}>
<div className="col-xs-4">
<Button icon="glyphicon glyphicon-remove" name="Remove" kind="primary"
handleClick={this.onReadingDelete} style={book_item.buttonRemove} />
</div>
<div className="col-xs-4">
<Button icon="glyphicon glyphicon-th-list" name="Shelf" kind="primary"/>
</div>
<div className="col-xs-4">
<Button icon="glyphicon glyphicon-edit" name="Edit" kind="primary"/>
</div>
</div>
</div>
</Equalizer>
</div>
</div>
</div>
我想在回答这个问题之前,我们需要了解一些事情:
1. 这些 Bootstrap 选项卡是否在它们之间的切换方面实现了某种 non-React JavaScript?我知道 Bootstrap 不仅提供了 CSS 文件用于安装,而且还可以提供一些 JavaScript 来使用它的一些组件。
2. 我猜在您发布的图片中,您是从“收藏夹”选项卡导航到“全部”选项卡?如果是这样,“全部”选项卡应该显示什么? (有可能它实际上正在渲染预期的元素,只是 css 让它看起来不对。)
3.如果上面两点不是问题的根源,那么我们就需要看一些代码,至少是涉及到的组件的render函数,以及他们的状态。
react-equalizer
的创建者。这可能是在加载图像之前发生的均衡问题。我刚刚发布了一个解决此问题的新版本 (1.0.5)。
这是一个带有 react-bootstrap
个选项卡的工作示例:
http://jsbin.com/mayanakiqo/edit?js,output
class MyComponent extends React.Component {
render() {
let colStyles = {
float: 'left',
width: '50%',
padding: '10px',
background: '#ddd',
border: '4px solid white',
boxSizing: 'border-box'
}
return (
<div>
<Tabs defaultActiveKey={2}>
<Tab eventKey={1} title="Tab 1">
<Equalizer byRow={false}>
<div style={colStyles}>
<img src="http://placehold.it/200x300" />
</div>
<div style={colStyles}>
Test content
</div>
</Equalizer>
</Tab>
<Tab eventKey={2} title="Tab 2">
<Equalizer byRow={false}>
<div style={colStyles}>
<img src="http://placehold.it/200x300" />
</div>
<div style={colStyles}>
Test content
</div>
</Equalizer>
</Tab>
<Tab eventKey={3} title="Tab 3">
<Equalizer byRow={false}>
<div style={colStyles}>
<img src="http://placehold.it/200x300" />
</div>
<div style={colStyles}>
Test content
</div>
</Equalizer>
</Tab>
</Tabs>
</div>
)
}
}
另一种选择是使用 flexbox 来均衡高度,例如参见 [=14=],但这取决于您需要支持的浏览器。