【发布时间】:2021-09-16 14:18:33
【问题描述】:
我希望能够使用状态为 Set 对象的 PureComponent,并在每次更新该集合的大小时实现重新渲染。
目前,以下不起作用:
class App extends React.PureComponent {
state = {
items: new Set()
};
addItem = () => {
this.setState(({ items }) => ({ items: this.state.items.add(Math.random()) }));
};
render() {
return (
<div>
<div>Total Items {this.state.items.size}</div>
<button onClick={this.addItem}>Add item</button>
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
注意,当使用数组时,它可以工作:
class App extends React.PureComponent {
state = {
items: []
};
addItem = () => {
this.setState(({ items }) => ({ items: [...items, Math.random()] }));
};
render() {
return (
<div>
<div>Total Items {this.state.items.length}</div>
<button onClick={this.addItem}>Add item</button>
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
要使第一个 sn-p 工作需要什么?
【问题讨论】:
-
@AC3,谢谢,但这里不是这样。它在这里不起作用的唯一原因是使用纯组件,该问题中没有讨论。
标签: reactjs set components