我正在使用 React 构建一个具有未知数量的子元素的元素,我需要对每个元素的引用。考虑以下代码:
class Items extends React.Component {
constructor() {
super();
this.itemEls = [];
}
render() {
return (
<div>
{
this.props.items.map((item, index) => {
return <div className="item" key={index} ref={(el) => this.itemEls.push(el)}>{item}</div>;
})
}
</div>
);
}
componentDidMount() {
console.log(this.itemEls.map((el) => el.innerHTML));
}
}
ReactDOM.render(<Items items={["Hello", "World", "Foo", "Bar"]} />, document.getElementById('container'));
.item {
display: inline-block;
background: #EEE;
border: 1px solid #DDD;
color: #999;
padding: 10px;
font-family: sans-serif;
font-weight: bold;
margin: 10px;
border-radius: 5px;
cursor: default;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="container"></div>
我遍历提供的数组并在执行过程中保存对每个元素的引用。当组件安装时,我按照元素内容添加到数组的顺序打印出元素内容列表。到目前为止,在我所有的测试中,顺序都是正确的,但我找不到任何文件证明这不仅仅是后台发生的秘密竞争条件的最常见结果。
调用引用函数的顺序是否一致?
这里显而易见的解决方案是预先设置数组长度componentWillMount
并用index
来自的值填充它this.props.items.map
- 但为了论证,假设在我发现自己所处的实际情况下这是不可能的。