Я создаю кнопку редактирования для моего приложения CRUD.В этом компоненте каждый отдельный «рейтинг» сопоставляется с одним из этих компонентов.Компонент начинает отображать рейтинг как сохраненный в БД, но пользователи могут нажать кнопку редактирования, и он превращается в форму!(в конце концов, я получу начальные значения для заполнения полей формы данными, отображаемыми в альтернативной опции рендеринга).
Прямо сейчас для кнопки редактирования у меня есть собственный обработчик отправки, получающий отправленные данные из двух полей формы как «formProps».Однако, прежде чем передать их бэкэнд-API, я также должен выяснить, как привязать идентификатор или что-то к обработчику отправки.
Как видно из компонента, расположенного прямо под формой, весь этот дочерний компонент имеет доступ к необходимому, передаваемому от родителя, который может быть вызван как this.props.id.Есть ли способ связать this.props.id с formProps до того, как handleSubmit переместит все это в действия Redux?
class Rating extends Component{
constructor(props){
super(props);
this.state = {
formClass: "notShowing",
ratingClass: "showing"
}
}
renderForm = () => {
this.state.formClass === "notShowing"
? this.setState({formClass: "showing", ratingClass: "notShowing"})
: this.setState({formClass: "notShowing", ratingClass: "showing"})
}
onSubmit = (formProps) => {
console.log("this is what the submitHandler recieves;", formProps);
this.props.editRating(formProps, () => {
this.props.history.push('/userDashboard');
});
}
render() {
const { handleSubmit, reset } = this.props;
return (
<div className="card darken-1" key={this.props._id}>
<div className={this.state.formClass}>
<form onSubmit={handleSubmit(this.onSubmit)}>
<p>What are you rating?</p>
<fieldset>
<Field
name="title"
type="text"
component="input"
autoComplete="none"
/>
<p>Add your rates!</p>
<Field
name="value"
type="number"
component="input"
autoComplete="none"
/>
</fieldset>
<button onClick={this.renderForm} type="submit" className="teal btn-flat right white-text">Submit</button>
</form>
<button onClick={this.renderForm}>Cancel</button>
</div>
<div className={this.state.ratingClass}>
<div className="card-content">
<span className="card-title">{this.props.title}</span>
<p>{this.props.value}</p>
<button onClick={this.renderForm}>Edit</button>
<button onClick={() => this.props.deleteRating(this.props.id)}>Delete</button>
</div >
</div>
</div>
);
}
}
function mapStateToProps({ratings}) {
return { ratings };
}
export default compose(
connect(mapStateToProps, actions),
reduxForm({ form: 'editRating' })
)(Rating);