如何过滤 refs 数组
How to filter an array of refs
我有一组数据映射并显示在屏幕上。我希望能够在单击时对这些 dom 元素执行操作。我已经将 refs 存储在一个数组中,现在 onclick 我想对被点击的那个做一些事情,对其余的做一些其他事情。
所以我想到了使用 es6 过滤器从新数组中删除当前的,然后迭代它们。然后我可以自由地对被点击的项目做任何我想做的事。
但是我无法让过滤器工作。不安慰任何东西。
https://codepen.io/_adamjw3/pen/MWWmGEg
class App extends React.Component {
constructor(props) {
super();
this.myRefs = [];
this.state = {
testData: [
"dave",
"pete",
"mark"
]
}
}
myActionHandler = key => {
const selectedDomElement = this.myRefs[key];
const filtered = this.myRefs.filter(item => item !== item);
filtered.forEach(function(entry) {
console.log("all but selected ne", entry);
});
};
render(){
return (
<div className="container">
{this.state.testData.map((item, key) => {
return (
<div key={key} >
<button onClick={() => this.myActionHandler(key)} ref={ref => (this.myRefs[key] = ref)} >
{item}
</button>
</div>
);
})}
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('app'));
看来您唯一的问题是您的过滤功能有误。它应该使用 selectedDomElement
.
const filtered = this.myRefs.filter(item => item !== selectedDomElement);
我有一组数据映射并显示在屏幕上。我希望能够在单击时对这些 dom 元素执行操作。我已经将 refs 存储在一个数组中,现在 onclick 我想对被点击的那个做一些事情,对其余的做一些其他事情。
所以我想到了使用 es6 过滤器从新数组中删除当前的,然后迭代它们。然后我可以自由地对被点击的项目做任何我想做的事。
但是我无法让过滤器工作。不安慰任何东西。
https://codepen.io/_adamjw3/pen/MWWmGEg
class App extends React.Component {
constructor(props) {
super();
this.myRefs = [];
this.state = {
testData: [
"dave",
"pete",
"mark"
]
}
}
myActionHandler = key => {
const selectedDomElement = this.myRefs[key];
const filtered = this.myRefs.filter(item => item !== item);
filtered.forEach(function(entry) {
console.log("all but selected ne", entry);
});
};
render(){
return (
<div className="container">
{this.state.testData.map((item, key) => {
return (
<div key={key} >
<button onClick={() => this.myActionHandler(key)} ref={ref => (this.myRefs[key] = ref)} >
{item}
</button>
</div>
);
})}
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('app'));
看来您唯一的问题是您的过滤功能有误。它应该使用 selectedDomElement
.
const filtered = this.myRefs.filter(item => item !== selectedDomElement);