mit*_*nia 22 javascript reactjs
是否可以Set在React中使用ES6的数据结构?
例如,如果我有一个由不同项目组成的清单,我想维护每个项目的检查状态.我想写这样的东西:
export default class Checklist extends React.Component {
constructor(props) {
super(props);
this.state = {
checkedItems: new Set()
}
}
addItem(item) {
//...?
}
removeItem(item) {
//...?
}
getItemCheckedStatus(item) {
return this.state.checkedItems.has(item);
}
// More code...
}
Run Code Online (Sandbox Code Playgroud)
我理解Set可能存在性质上的问题,并且React在更新组件时执行浅层比较,因此它期望不可变对象在状态中传递和保持.但是,有没有办法在状态中保持和维护一个Set对象?
Ori*_*ori 31
因为只有在状态属性被替换而且没有变异(浅比较)时,react才会识别状态更改,因此您必须从旧的Set创建一个新的Set,并将更改应用于它.
这是可能的,因为新的Set(oldSet)!== oldSet.
const oldSet = new Set([1, 2]);
const newSet = new Set(oldSet);
console.log(oldSet === newSet);Run Code Online (Sandbox Code Playgroud)
这就是你在课堂上使用它的方式:
export default class Checklist extends React.Component {
constructor(props) {
super(props);
this.state = {
checkedItems: new Set()
}
this.addItem = this.addItem.bind(this);
this.removeItem = this.removeItem.bind(this);
}
addItem(item) {
this.setState(({ checkedItems }) => ({
checkedItems: new Set(checkedItems).add(item)
}));
}
removeItem(item) {
this.setState(({ checkedItems }) => {
const newChecked = new Set(checkedItems);
newChecked.delete(item);
return {
checkedItems: newChecked
};
});
}
getItemCheckedStatus(item) {
return this.state.checkedItems.has(item);
}
// More code...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10356 次 |
| 最近记录: |