У меня есть атрибуты в состоянии, я хотел бы убедиться, что, указав функцию, имя атрибута изменяет значение, содержащееся в состоянии.
Кажется, это работает, проблема в том, что если у меня есть объектэтого типа в состоянии:
companyInfo: {
name: "",
vatNumber: "",
legalRepresentative: ""
}
Он не работает должным образом, так как код теперь устанавливается в состояние, в этом случае создается новый атрибут.
Так что я быхотел бы сделать что-то вроде этого:
handleChangeField("companyInfo.name")
Он изменяется на имя атрибута состояния объекта obj companyInfo, находящегося в штате.
Можете ли вы дать мне несколько советов?
Ссылка: коды и поле
Код:
import ReactDOM from "react-dom";
import React, { Component } from "react";
import ReactJson from "react-json-view";
class Todo extends Component {
constructor(props) {
super(props);
this.state = {
email: "email0",
role: "role0",
companyInfo: {
name: "",
vatNumber: "",
legalRepresentative: ""
}
};
}
returnStateElement = (...elements) => {
const copy = Object.assign({}, this.state);
return elements.reduce((obj, key) => ({ ...obj, [key]: copy[key] }), {});
};
handleChangeField = field => evt => {
let state = {};
state[field] = evt.target.value;
this.setState(state);
};
handleSubmit = () => {
let el = this.returnStateElement(
"name",
"email",
"vatNumber",
"legalRepresentative",
"role"
);
let { name, email, legalRepresentative, vatNumber, role } = el;
let dataSender = {};
dataSender.email = email;
dataSender.role = role;
dataSender.companyInfo = {};
dataSender.companyInfo.name = name;
dataSender.companyInfo.legalRepresentative = legalRepresentative;
dataSender.companyInfo.vatNumber = vatNumber;
console.log(this.state);
//console.log(dataSender)
};
render() {
return (
<div>
<input onChange={this.handleChangeField("email")} />
<br />
<br />
<input onChange={this.handleChangeField("companyInfo.name")} />
<br />
<br />
<button onClick={() => this.handleSubmit()}>send</button>
<br />
<br />
<ReactJson src={this.state} theme="solarized" />
</div>
);
}
}
ReactDOM.render(<Todo />, document.getElementById("root"));