Невозможно прочитать свойство «отправить» неопределенного - React

Я создаю форму мастера с помощью реакции-окончательной формы. Когда я нажимаю кнопку, я получаю эту ошибку: введите здесь описание изображения

Я не понимаю, почему появляется такое сообщение. Это мой компонент Wizard.

import { Form as FinalForm } from 'react-final-form'; 
import { Button, Form, } from 'reactstrap';
    class Wizard extends Component {
      static Page = ({ children }) => children
    
      constructor(props) {
        super(props);
        this.state = {
          page: 0,
          values: props.initialValues || {},
        };
      }
    
      next = (values) => {
        const { children } = this.props;
        this.setState((state) => ({
          page: Math.min(state.page + 1, React.Children.toArray(children).length - 1),
          values,
        }));
        console.log('ha');
      }
    
      previous = () => {
        this.setState((state) => ({
          page: Math.max(state.page - 1, 0),
        }));
      }
    
      validate = (values) => {
        const { children } = this.props;
        const { page } = this.state;
        const activePage = React.Children.toArray(children)[
          page
        ];
        return activePage.props.validate ? activePage.props.validate(values) : {};
      }
    
      handleSubmit = (values) => {
        const { children, onSubmit } = this.props;
        const { page } = this.state;
        const isLastPage = page === React.Children.count(children) - 1;
        if (isLastPage) {
          onSubmit(values);
        } else {
          this.next(values);
        }
        console.log(children);
        console.log(React.Children.toArray(children));
        console.log('hao');
      }
    
      render() {
        const { children } = this.props;
        const { page, values } = this.state;
        const activePage = React.Children.toArray(children)[page];
        const isLastPage = page === React.Children.count(children) - 1;
        return (
          <FinalForm
            initialValues={values}
            validate={this.validate}
            onSubmit={this.handleSubmit}
          >
            {
              ({
                handleSubmit,
                submitting,
                pristine,
                invalid,
              }) => (
                <Form onSubmit={handleSubmit}>
                  {activePage}
                  <div className="buttons">
                    {page > 0 && (
                      <Button type="button" onClick={this.previous}>
                        « Previous
                      </Button>
                    )}
                    {!isLastPage && <Button color="success" type="submit">Next »</Button>}
                    {isLastPage && (
                      <Button color="success" type="submit" disabled={submitting || pristine || invalid}>
                        Submit
                      </Button>
                    )}
                  </div>
                </Form>
              )
            }
          </FinalForm>
        );
      }
    }

Когда я нажимаю кнопку, функция handleSubmit, вероятно, не срабатывает, потому что console.log не отображается. Может кто знает почему появляется такое сообщение? Спасибо за помощь заранее.


person Elder    schedule 04.01.2019    source источник
comment
<Form> должно быть <form>   -  person JJJ    schedule 04.01.2019
comment
@JJJ Я импортирую кнопку и форму из reactstrap. Но я изменил Form на form, но ошибка все равно появляется.   -  person Elder    schedule 04.01.2019
comment
импортировать {Form as FinalForm} из 'react-final-form'; импортировать {кнопку, форму,} из 'reactstrap';   -  person Elder    schedule 04.01.2019
comment
минимальный воспроизводимый пример пожалуйста - вам нужно показать импорт в вопросе.   -  person JJJ    schedule 04.01.2019
comment
@JJJ хорошо, я обновляю свой код.   -  person Elder    schedule 04.01.2019
comment
@JJJ, а может быть, ты видишь какую-то ошибку?   -  person Elder    schedule 04.01.2019


Ответы (1)


Ваши кнопки не имеют события onClick:

        {!isLastPage && <Button color="success" type="submit">Next »</Button>}
                {isLastPage && (
                  <Button color="success" type="submit" disabled={submitting || pristine || invalid}>
                    Submit
                  </Button>
                )}

поэтому они должны быть такими:

        {!isLastPage && <Button color="success" type="submit" onClick={handleSubmit}>Next »</Button>}
                {isLastPage && (
                  <Button color="success" type="submit" disabled={submitting || pristine || invalid} onClick={handleSubmit}>
                    Submit
                  </Button>
                )}
person Michael Ploeckinger    schedule 04.01.2019
comment
codeandbox.io/s/8l5qn573o2 Вот аналогичный пример и все работает, однако в моем основном проекте не работает. Компонент Wizard такой же, как и в моем проекте. Однако я воспользовался вашими вызовами подсказок-функций, но через некоторое время он получает Cannot read property 'getBoundingClientRect' of null - person Elder; 04.01.2019
comment
Спасибо за это. одна разница, которую я обнаружил, заключается в том, что вы не import PropTypes from "prop-types";, может быть, тогда дело в этом? - person Michael Ploeckinger; 04.01.2019
comment
В моем основном проекте я импортирую PropTypes из 'prop-types';. Теперь в консоли у меня полно ошибок: TypeError: this.unsubscribe is not a function, TypeError: Cannot read property 'initialize' of undefined. The above error occurred in the <Field> component - person Elder; 04.01.2019
comment
Похоже, вам нужно снова проверить свой код на образце проекта - эта ошибка выглядит так, как будто некоторые части отсутствуют. - person Michael Ploeckinger; 04.01.2019