Я пытался воссоздать эффект ввода материала с помощью размещенных полей в React.Когда пользователь нажимает на поле, я бы хотел, чтобы ярлык двигался вверх и уменьшался.Мне удалось создать эффект, но метки не возвращаются в исходное состояние, если поле пустое.
Однако они возвращаются в исходное состояние, как только я щелкаю другое поле ввода и начинаю печатать, что, я думаю, вызывает обновление.
Код:
class CheckoutFormSmall extends Component {
constructor (props) {
super(props)
this.handleEmailChange = this.handleEmailChange.bind(this)
this.handleNameChange = this.handleNameChange.bind(this)
this.startQuantityUpdate = this.startQuantityUpdate.bind(this)
this.stopQuantityUpdate = this.stopQuantityUpdate.bind(this)
this.handleQuantityChange = this.handleQuantityChange.bind(this)
this.onFailedUpdates = this.onFailedUpdates.bind(this)
this.state = {
numberIsEmpty: false,
expdateIsEmpty: false,
cvvIsEmpty: false,
formValid: false,
}
hostedFieldsInstance.on('notEmpty', event => {
const number = event.fields.number
const isEmpty = number.isEmpty
this.setState({numberIsEmpty: !isEmpty })
})
hostedFieldsInstance.on('notEmpty', event => {
const expirationDate = event.fields.expirationDate
const isEmpty = expirationDate.isEmpty
this.setState({expdateIsEmpty: !isEmpty })
})
hostedFieldsInstance.on('notEmpty', event => {
const cvv = event.fields.cvv
const isEmpty = cvv.isEmpty
this.setState({cvvIsEmpty: !isEmpty })
})
const inputStyleNumber = classNames({'input_full_hostedfields': this.state.numberIsEmpty })
const inputStyleExpirationDate = classNames({'input_full_hostedfields': this.state.expdateIsEmpty })
const inputStyleCvv = classNames({'input_full_hostedfields': this.state.cvvIsEmpty })
const forms = [
{icon: 'credit card', label: 'Credit Card Number', id: 'card-number', className:inputStyleNumber},
{icon: 'calendar outline', label: 'Expiration Date', id: 'expiration-date', className:inputStyleExpirationDate},
{icon: 'check circle outline', label: 'CVV', id: 'cvv', className:inputStyleCvv}
].map(
(data, i) => (
<div className='form-item form-row'>
<Icon className='form-icon' name={data.icon} />
<div id={data.id} className='form-input-style hosted-fields-container hosted-field'>
<label basic id='form-label-hostedfields' className={data.className}>{data.label} </label>
</div>
</div>
)
)
Я знаю, что это не самая чистая реализация этого (я очень начинающий программист), поэтому, пожалуйста, не стесняйтесь предлагать что-нибудь и все.
Заранее спасибо,