У меня есть компонент «редактировать категорию» в моем приложении React.Идентификатор передается через URL.Когда компонент монтируется, вызывается действие «fetchCategory», которое обновляет реквизиты компонента с текущей категорией.
У меня есть форма, которую я хочу предварительно заполнить, и в настоящее время яиспользуя значение defaultValue для ввода.
Однако это не отражается на состоянии, и метка для текстового поля перекрывает поле ввода.
Любая помощь будет принята с благодарностью.Ниже я оставлю фрагменты своего кода, которые помогут понять, что я пытаюсь сделать.
import React, { Component } from "react";
import { connect } from "react-redux";
import { fetchCategory } from "../../store/actions/categoryActions";
class AddOrEditCategory extends Component {
componentDidMount() {
this.props.fetchCategory(this.props.match.params.id);
if (this.props.match.params.id) {
this.setState({
_id: this.props.match.params.id
});
}
}
handleSubmit = e => {
e.preventDefault();
console.log(this.state);
};
handleChange = e => {
this.setState({
[e.target.id]: e.target.value
});
};
render() {
const addingNew = this.props.match.params.id === undefined;
return (
<div className="container">
<h4>{addingNew ? "Add category" : "Edit category"}</h4>
<form onSubmit={this.handleSubmit}>
<div className="input-field">
<input
type="text"
id="name"
defaultValue={this.props.category.name}
onChange={this.handleChange}
/>
<label htmlFor="name">Category name</label>
</div>
<div className="input-field">
<input
type="text"
id="urlKey"
onChange={this.handleChange}
defaultValue={this.props.category.urlKey}
/>
<label htmlFor="urlKey">URL Key</label>
</div>
<button className="btn">{addingNew ? "Add" : "Save"}</button>
</form>
</div>
);
}
}
const mapStateToProps = state => {
return {
category: state.categoryReducer.category
};
};
export default connect(
mapStateToProps,
{ fetchCategory }
)(AddOrEditCategory);
РЕДАКТИРОВАТЬ: включил весь компонент по запросу