У меня есть карточка товара с указанием деталей товара. Внизу есть «правка» button
. Когда clicked
показывает модальное поле с предварительно заполненными полями input
, которое можно отредактировать, а затем сохранить. Модал также можно закрыть без сохранения (но с измененными полями ввода) .
Моя проблема в том, что когда пользователь редактирует поля, затем закрывает модальное (без сохранения), а затем открывает его снова, поля не устанавливаются в исходное значение, но отображаются как измененные.
Я пробовал переменную с начальным состоянием, затем после закрытия заполнил состояние им, но она не работала. Пробовал реагировать реферами тоже, радости нет.
import React, { Component } from 'react'
import Modal from 'react-modal';
const customStyles = {
...
};
Modal.setAppElement('#root');
class AdminButtons extends Component {
state = {
modalIsOpen: false,
}
componentDidMount() {
const { id, inStock, name, price, type } = this.props.product
this.setState({ id, inStock, name, price, type })
}
openModal = () => {
this.setState({ modalIsOpen: true });
}
afterOpenModal = () => {
...
}
closeModal = () => {
this.setState({ modalIsOpen: false });
}
handleChange = (event) => {
const target = event.target
const input = target.value
const name = target.name
this.setState({ [name]: input })
}
render() {
const { product, remove } = this.props
const { modalIsOpen, name, inStock, price, type } = this.state
return (
<>
<button onClick={this.openModal}>EDIT</button>
<Modal
isOpen={modalIsOpen}
onAfterOpen={this.afterOpenModal}
style={customStyles}
contentLabel="Edit "
>
<h2 ref={subtitle => this.subtitle = subtitle}>Hello</h2>
<button onClick={this.closeModal}>close</button>
<div>{this.props.product.name}</div>
<form>
<label>
Name
<input name="name" type="text" value={name} onChange={this.handleChange} />
</label>
<label>inStock
<input name="inStock" type="text" value={inStock} onChange={this.handleChange} />
</label>
<label>
Price
<input name="price" type="text" value={price} onChange={this.handleChange} />
</label>
<label>
Type
<input name="type" type="text" value={type} onChange={this.handleChange} />
</label>
<button onClick={ () => {
this.props.edit(this.state)
this.closeModal() }
}>Save changes</button>
</form>
</Modal>
{product.isRemoved ?
<button> add </button> :
<button onClick={() => remove(product.id)}>remove</button>
}
</>
)
}
}