javascript - 如何在不将道具传递给该组件的情况下在组件内设置 div 样式(我正在使用包)
问题描述
我正在使用react-scrollbar包为我的内容呈现滚动条。我还想要一个箭头按钮,单击它会移动到某个滚动条区域。问题是,我正在尝试在我的组件中设置(marginTop)类的样式。
这是我的尝试:
// MY COMPONENT
scrollToNextUpload = () => {
const NextUpload = 400
this.setState({ marginTop : this.state.marginTop + NextUpload }, () => document.getElementsByClassName('scrollarea-content')[0].style.marginTop = "'" + this.state.marginTop + "px'")
}
// MY RENDER
render () {
<ScrollArea>
// my content
<div onClick={this.scrollToNext}></div>
</ScrollArea>
}
实际渲染了什么
<div class='scrollarea'>
<div class='scrollarea-content'>
// my content
<div onClick={this.scrollToNext}></div>
</div>
</div>
我想要的是
为了让滚动条滚动我的区域,我必须在“scrollarea-content”中添加一个 marginTop 样式。我可以通过将道具传递给 < ScrollArea > 然后在已安装的包中使用它们来做到这一点;但我试图避免更改原始包内容。
另外,还有另一种方法可以让我通过点击滚动吗?还有其他人对那个 NPM 包有经验吗?
解决方案
大多数库都提供了将样式应用于子组件的道具,在此库中,您可以将 className 传递给或在propcontentClassName
中使用内联样式:contentStyle
<ScrollArea contentStyle={{ marginTop: 10 }}>
另一种方法是编写 css 为scrollarea-content
类添加样式。
在一个.css
文件中:
.scrollarea-content {
margin-top: 10px;
}
编辑:在您的情况下,您可以使用如下道具以编程方式更改marginTop
样式:
scrollToNextUpload = () => {
const NextUpload = 400;
this.setState(prevState => ({ marginTop : prevState.marginTop + NextUpload }));
}
render () {
<ScrollArea contentStyle={{ marginTop: this.state.marginTop }}>
// my content
<div onClick={this.scrollToNext}></div>
</ScrollArea>
}
setState
请注意,当下一个状态值取决于前一个状态时,使用函数来防止不一致。
推荐阅读
- r - 使用 Plotly 图表向 Shiny 应用程序添加自定义标题
- jquery - 几秒钟后,如何使用 jquery 在选择时刷新页面...?
- android - 由于内存不足,gradle 无法构建 android 项目
- ios - arm64 iOS Swift Gstreamer 库 (Xcode 10.1) 不支持 rtspsrc
- cloud-foundry - Spring Cloud 数据流服务器 Cloud Foundry 配置服务器
- javascript - 可以在快递中使用中继吗?
- amazon-web-services - 使用 pem 文件通过 ssh 连接
- php - 使用 Bootstrap 4 在桌面屏幕右侧的菜单
- php - 带有 FPM 配置的 PHP Composer
- ios - 以编程方式快速定位和约束