Не удается получить доступ к функциям мутатора на странице формы мастера при использовании react-final-form

#react-final-form

#react-final-form

Вопрос:

Я пытаюсь создать форму мастера, используя react-final-form, обратившись к этому кодуhttps://codesandbox.io/s/km2n35kq3v. Для моего варианта использования мне нужны некоторые функции мутатора, которые будут использоваться внутри полей моей формы. Этот пример иллюстрирует, как это сделать — https://codesandbox.io/s/kx8qv67nk5?from-embed. Я не уверен, как получить доступ к функциям мутатора в моих шагах формы, когда я использую форму мастера вместо одностраничной формы.

Я попытался объединить оба примера, изменив <Form> компонент, отображаемый с помощью Wizard.js для передачи мутаторов. Однако я не могу получить доступ к этим мутаторам на страницах формы мастера.

В Wizard.js

     return (
      <Form
        mutators={{
          // potentially other mutators could be merged here
          ...arrayMutators,
        }}
        render={({
          handleSubmit,
          submitting,
          values,
          pristine,
          invalid,
          form: {
            mutators: {push, pop, remove},
          },
        }) => {
          return (
            <form onSubmit={handleSubmit}>

  

Другой файл index.js

 
    <Wizard
      initialValues={{ employed: true, stooge: "larry" }}
      onSubmit={onSubmit}
    >
      <Wizard.Page>
        <FieldArray name="customers">
          {({ fields }) =>
            fields.map((name, index) => (
              <div key={name}>
                <label>Cust. #{index   1}</label>

                <Field
                  name={`${name}.firstName`}
                  component="input"
                  placeholder="First Name"
                />
                <span
                  onClick={() => fields.remove(index)}
                  style={{ cursor: "pointer" }}
                >
                  ❌
                </span>
              </div>
            ))
          }
        </FieldArray>
      </Wizard.Page>
</Wizard>

  

Выдает ошибку — удалить не определено в index.js

Ответ №1:

Посмотрите на этот рабочий пример: https://codesandbox.io/s/znzlqvzvnx

изменения, которые я внес:

Wizard.js

      static Page = ({ children, mutators }) => {
        if(typeof children === 'function'){
          return children(mutators);
        }

        return children;
      };

     ...

     <form onSubmit={handleSubmit}>
       {
          // activePage
          <activePage.type {...activePage.props} mutators={mutators} />
       }

     ...

  

index.js (только сначала <Wizard.page> )

       <Wizard.Page>
        {
          ({ upper }) => (
            <React.Fragment>
              <div>
                <label>First Name</label>
                <Field
                  name="firstName"
                  component="input"

                  ...

              </div>
            </React.Fragment>
          )
        }        
      </Wizard.Page>
  

Комментарии:

1. Спасибо, что поделились этим. Я попытался следовать этому примеру, однако он не работает для пользовательских функций мутатора вместо мутаторов fieldArray. Например, я попытался использовать «верхнюю» функцию мутатора в этом примере — codesandbox.io/s/v6my448l1y .