reactjs - 在 React 中执行 onChange 函数时状态不更新
问题描述
我的 React 函数正在获取用户在文本框中输入的值,console.log 显示值发生变化,但状态本身似乎没有变化。
我有一个包含客户端列表的外部 .js 文件,然后我将其导入到状态中:
const clients = [
{
_id: 'client1',
name: 'Robert Beaney',
bench: 93,
squat: 150,
deadlift: 209,
total: 0,
totalPounds: 0,
kgAway: 0,
poundsAway: 0,
weight: [70, 65, 63]
},
{
_id: 'client2',
name: 'Client Two',
bench: 60,
squat: 135,
deadlift: 160,
total: 0,
totalPounds: 0,
kgAway: 0,
poundsAway: 0,
weight: [60, 55, 50]
}
];
像这样导入状态:
state = {
clients: getClients()
};
当用户在输入框中输入新数字时,我希望数字改变状态。我的代码如下:
<div className="row">
{this.state.clients.map(client => {
return (
<div className="client col-md-6" key={client._id}>
<p>{client.name}</p>
<div className="enter-totals">
<input
type="text"
id="total-bench"
defaultValue={client.bench}
onChange={this.handleChange.bind(this)}
/>
功能是:
handleChange(e) {
let newBench = e.target.value;
console.log(newBench);
this.setState({ bench: newBench });
}
但是渲染的 {client.bench} 没有任何反应
有任何想法吗?
解决方案
你不能绑定到defaultValue
- 它要么是 that 要么value
.
理想情况下,您只想实际更改受影响的客户端,因此您的 handleChange 应该是:
handleChange(value, clientData){
const { clients } = this.state;
clients.some(client => {
if (client._id === clientData._id){
client.bench = value;
return true;
}
});
this.setState({ clients });
}
然后onChange={e => this.handleChange(e.target.value, client)};
并绑定value={client.value}
输入。
由于您必须更改所有指标,因此更通用的方法也将接受“prop”作为参数,因此您可以handleChange('deadlift', value, client)
自定义handleWeightChange
推送到数组的位置。
然后,显然,您想要制作一个<ClientEdit client={client} onChange={} />
组件等并开始使其模块化。
我只是对健身房的东西感到兴奋。制作所有指标数组,以便您可以跟踪进度和回归,并为读数加盖时间戳:D
这是一个工作示例:https ://codesandbox.io/s/545xy5q22k
推荐阅读
- dart - 关于 Mixin 和 Dart 类的继承
- android - 通过 Facebook SDK 将事件发送到分析的问题
- google-cloud-platform - 数据流管道 - “处理停滞不前
至少对于 - javascript - Service Worker 'sync' 事件在 IOS 上不起作用,如何将离线数据存储到 indexedDB 中?
- c# - 如何从sql中的整数列中读取空值到C#?
- javascript - 无法在固定位置关闭自定义弹出窗口
- spring-boot - Spring boot jpa hikaricp 空闲连接行为
- asp.net-mvc - DBSet.Add(object o) 的返回值是多少
- android - 对话框内带有 viewpager 的自定义视图不起作用
- android - 了解 google glog 宏