作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个<Panel />
组件结构如下:
import React, {Component, PropTypes} from 'react';
export default class Panel extends Component {
static propTypes = {
children: PropTypes.object,
scrollable: PropTypes.bool,
swipeable: PropTypes.bool
};
static defaultProps = {
scrollable: true,
swipeable: false
};
render() {
const styles = require('./Panel.css');
const {
children,
scrollable
} = this.props;
return (
<div className={styles.Base}>
{ scrollable ?
<div className={styles.ScrollArea}>{children}</div>
: {children}
}
</div>
);
}
}
它基本上只是一个包装组件,通常包含可滚动项目的列表。我这样使用它:
<Panel>
<ul className={styles.FontMenu}>
{ fonts.map((font) => {
return (
<li
key={`font-menu-${font.id}`}
className={selectedFamily.id === font.id ? styles['FontMenuItem--isActive'] : styles.FontMenuItem}>
{font.label}
</li>
);
})}
</ul>
</Panel>
当面板安装时,我偶尔需要能够滚动到列表中的特定项目。我知道我想要滚动到的项目的索引,并且我想向 <Panel />
添加一个方法需要 scrollTo
的组件prop 作为使用该索引的属性,但由于列表中的项目是动态子项,我不确定什么是明智的实现方式。
如何轻松定位组件的动态子组件并获取其属性?
最佳答案
我不确定如何实现您的问题的解决方案,因为我不知道如何设置scrollTo。如果它是基于子属性设置的,那么您可能需要在面板的 render() 中使用cloneElement 在子属性上设置自定义属性:
render(){
return (
<div>
{this.renderChildren()}
</div>
)
}
renderChildren(){
return React.Children.map(this.props.children, function(child){
if (child.property1 === 'scrollHere'){
return React.cloneElement(child, { shouldScrollToHere: true })
else return child
}.bind(this))
}
然后在面板的 componentDidMount() 中,也许您可以查看子项并滚动到正确的项目,也许可以使用 setState。
关于javascript - 定位 this.props.children 的特定子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36290686/
我是一名优秀的程序员,十分优秀!