javascript - 在 React 中重置组件状态
问题描述
我真的很难用 React 中的方法将状态重置回原来的状态。我当前的重置方法仅重置该值。我尝试添加等于原始状态的 const,然后将状态设置为等于原始状态,但我没有运气。
有什么建议吗?
class App extends Component {
state = {
counters: [
{ id: 1, value: 4 },
{ id: 2, value: 0 },
{ id: 3, value: 0 },
{ id: 4, value: 0 }
]
};
handleReset = () => {
const counters = this.state.counters.map(c => {
c.value = 0;
return c;
});
this.setState({ counters: counters });
};
}
解决方案
您可以将初始状态保存在单独的数组中,并创建数组的副本作为初始状态,并在使用handleReset
.
例子
const counters = [
{ id: 1, value: 4 },
{ id: 2, value: 0 },
{ id: 3, value: 0 },
{ id: 4, value: 0 }
];
class App extends React.Component {
state = {
counters: [...counters]
};
handleReset = () => {
this.setState({ counters: [...counters] });
};
handleClick = index => {
this.setState(prevState => {
const counters = [...prevState.counters];
counters[index] = {
...counters[index],
value: counters[index].value + 1
};
return { counters };
});
};
render() {
return (
<div>
{this.state.counters.map((counter, index) => (
<button id={counter.id} onClick={() => this.handleClick(index)}>
{counter.value}
</button>
))}
<div>
<button onClick={this.handleReset}>Reset</button>
</div>
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<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="root"></div>
推荐阅读
- javascript - CryptoJS 解码返回值
- google-apps-script - Google 表单 - 采用(长)现有表单并使用脚本添加基于答案的页面导航
- java - 找不到主类
- java - 如何通过两个键使用 Jolt 聚合 JSON 数据?
- feathersjs - FeathersJS - 确保只有注册的用户才能获得“用户创建”
- python - 使用非 Qt 从 Qt QJsonDocument::toBinaryData 读取二进制 Json?
- python - Spark 作业与 0 个执行者一起挂起
- java - 从 Guice 模块定义中获取调用者的名称或引用
- javascript - 随机图像游戏停止重复
- c - 向死服务器发送 UDP 数据包