Получение значений из FormPanel в ExtReact 6.6.0

Как мне получать значения из FormPanel с помощью ext-реагировать 6.6.0?

В соответствии с документацией API я должен использовать getValues функция, которая работает в 6.5.1, но я получаю ошибку _this.form.getValues is not a function в 6.6.0

Код

Работает в 6.5.1: https://fiddle.sencha.com/?extreact

Сбой в 6.6.0 (см. Консоль для ошибки): https://fiddle.sencha.com/?extreact

1 ответ

Решение

Я получаю сообщение об ошибке _this.form.getValues ​​не является функцией в 6.6.0

Причина ref={form => this.form = form}, В extreact-6.6.0 переменная формы не является точной formpanel, Так что для этого вам нужно получить доступ, как это

ref={form => this.form = (this.form || form.cmp)}}

Другой способ использовать button.up('formpanel'), чтобы получить formpanel составная часть. Эта кнопка является первым параметром вашего handler,

button.up('formpanel').getValues()

Вы можете проверить здесь с рабочей скрипкой.

Фрагмент кода

import React, { Component } from 'react';
import {launch} from '@sencha/ext-react';
import { ExtReact } from '@sencha/ext-react';
import { Container, Label, FormPanel, TextField, Button } from '@sencha/ext-modern';

class App extends Component {

    state = {
        values:JSON.stringify({
            fname: 'null',
            lname: 'null'
        })
    }

    submit = (btn) => {
        const values = btn.up('formpanel').getValues();

        console.log('Values using up selector',values);

        console.log('Values using up ref',this.form.getValues());

        this.setState({values:JSON.stringify(this.form.getValues())});
    }

    render() {
        return (
            <Container defaults={{ margin: 10, shadow: true }}>
                <FormPanel title="Form" ref={form => this.form = (this.form || form.cmp)}>
                    <TextField name="fname" label="First Name"/>
                    <TextField name="lname" label="Last Name"/>
                    <Button handler={this.submit} text="Submit"/>
                </FormPanel>

                <Label padding={'10'} html={this.state.values} />
            </Container>
        )
    }
}

launch(<ExtReact><App /></ExtReact>);
Другие вопросы по тегам