在反应中更新列表状态
Updating state of list in react
我正在构建一个 React 应用程序,我构建了几个 input fields
。我正在尝试通过 state
更新他们的 value
。但是每当我输入 field
时它都会创建一个新实例
App.js
class App extends React.Component {
state = {
fields = [
{
id: nextId(),
value: '',
},
{
id: nextId(),
value: '',
},
{
id: nextId(),
value: '',
},
]
}
updateValue = (evt) => {
var item = Object.assign({}, this.state.fields[evt.target.id], {value: evt.target.value}
var fields = this.state.fields;
fields[evt.target.id] = item
this.setState({fields: fields})
}
render() {
return (
{this.state.fields.map((values) => (
<>
<input id={values.id} value={values.value} type="text" onChange={this.updateValue} />
</>
))}
)
}
}
我已经尝试了很多次,但每次我更改字段并且不更新 list state
时它仍然在创建新实例。
我想做什么?
我正在尝试更新用户正在键入或写入的每个特定字段的状态值
我在使用 nextId()
的地方使用 react-id-generator
如有任何帮助,我们将不胜感激。
每当您使用数组状态并需要访问(编辑或删除)某个项目时,最好通过其索引访问它。所以 updateValue
实现看起来像这样。
updateValue = (index) => (event) => {
// never mutate the state, clone the array first
const newFields = JSON.parse(JSON.stringify(this.state.fields));
// access the element by its index and update its value property
newFields[index].value = event.target.value;
// update the state
this.setState({ fields: newFields });
};
class App extends React.Component {
state = {
fields = [
{
id: 1,
value: '',
},
{
id: 2,
value: '',
},
{
id: 3,
value: '',
},
],
};
updateValue = (index) => (event) => {
let newFields = this.state.fields.slice(0);
newFields[index].value = event.target.value;
this.setState({ fields: newFields });
};
render() {
return (
<>
{this.state.fields.map(({ id, value }, index) => (
// call updateValue with the field's index
<input id={id} onChange={this.updateValue(index)} value={value} />
))}
</>
);
}
}
我正在构建一个 React 应用程序,我构建了几个 input fields
。我正在尝试通过 state
更新他们的 value
。但是每当我输入 field
App.js
class App extends React.Component {
state = {
fields = [
{
id: nextId(),
value: '',
},
{
id: nextId(),
value: '',
},
{
id: nextId(),
value: '',
},
]
}
updateValue = (evt) => {
var item = Object.assign({}, this.state.fields[evt.target.id], {value: evt.target.value}
var fields = this.state.fields;
fields[evt.target.id] = item
this.setState({fields: fields})
}
render() {
return (
{this.state.fields.map((values) => (
<>
<input id={values.id} value={values.value} type="text" onChange={this.updateValue} />
</>
))}
)
}
}
我已经尝试了很多次,但每次我更改字段并且不更新 list state
时它仍然在创建新实例。
我想做什么?
我正在尝试更新用户正在键入或写入的每个特定字段的状态值
我在使用 nextId()
的地方使用 react-id-generator如有任何帮助,我们将不胜感激。
每当您使用数组状态并需要访问(编辑或删除)某个项目时,最好通过其索引访问它。所以 updateValue
实现看起来像这样。
updateValue = (index) => (event) => {
// never mutate the state, clone the array first
const newFields = JSON.parse(JSON.stringify(this.state.fields));
// access the element by its index and update its value property
newFields[index].value = event.target.value;
// update the state
this.setState({ fields: newFields });
};
class App extends React.Component {
state = {
fields = [
{
id: 1,
value: '',
},
{
id: 2,
value: '',
},
{
id: 3,
value: '',
},
],
};
updateValue = (index) => (event) => {
let newFields = this.state.fields.slice(0);
newFields[index].value = event.target.value;
this.setState({ fields: newFields });
};
render() {
return (
<>
{this.state.fields.map(({ id, value }, index) => (
// call updateValue with the field's index
<input id={id} onChange={this.updateValue(index)} value={value} />
))}
</>
);
}
}