1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors_react-component-field-form

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

rc-field-form

Компонент формы для React с акцентом на производительность.

Версия NPM dumi Статус сборки Codecov Скачиваемость NPM

Разработка

npm install
npm start
open http://localhost:8000

Возможности

Установка

rc-field-form

Использование

import Form, { Field } from 'rc-field-form';

const Input = ({ value = '', ...props }) => <input value={value} {...props} />;

const Demo = () => {
  return (
    <Form
      onFinish={values => {
        console.log('Finish:', values);
      }}
    >
      <Field name="username">
        <Input placeholder="Username" />
      </Field>
      <Field name="password">
        <Input placeholder="Password" />
      </Field>

      <button>Submit</button>
    </Form>
  );
};

export default Demo;

🔥 API

Мы используем TypeScript для создания определений типов. Вы можете просмотреть их напрямую в IDE. Но вы всё равно можете проверить определения типов здесь.### Форма| Prop | Описание | Тип | Значение по умолчанию | | ---------------- | ------------------------------------------------ | -------------------------------------------- | ------------------------------ | | component | Позволяет настраивать компонент отображения формы | string | Component | false | form | | fields | Управляет статусом полей формы. Используется только при работе с Redux | FieldData[] | - | | form | Устанавливает экземпляр формы, созданный с помощью useForm | FormInstance | Form.useForm() | | initialValues | Начальное значение формы | Object | - | | name | Настройка имени с помощью FormProvider | string | - | | preserve | Сохраняет значение при удалении поля | boolean | false | | validateMessages | Устанавливает шаблон сообщений об ошибке валидации | ValidateMessages | - | | onFieldsChange | Вызывается при изменении любого значения поля | (changedFields, allFields) => void | - | | onFinish | Вызывается при успешной отправке формы | (values) => void | - | | onFinishFailed | Вызывается при неудачной отправке формы | ({ values, errorFields, outOfDate }) => void | - | | onValuesChange | Вызывается при изменении любого значения поля | (changedValues, values) => void | - |### Поле| Свойство | Описание | Тип | Значение по умолчанию | | --------------------- | --------------------------------------------------------------------------- | ---------------------------------------------- | ---------------------- | | dependencies | Перерисовывает поле, если зависимости изменились | NamePath[] | - | | getValueFromEvent | Указывает, как получить значение из события | (args: any[]) => any | - | | getValueProps | Настройка дополнительных свойств с значением. Это свойство отключает valuePropName | (value) => any | - | | initialValue | Начальное значение поля | any | - | | name | Путь имени поля | NamePath | - | | normalize | Нормализация значения перед обновлением | (value, prevValue, prevValues) => any | - | | preserve | Сохранение значения при удалении поля | boolean | false | | rules | Правила валидации | Rule[] | - | | shouldUpdate | Проверка, нужно ли обновлять поле | boolean | (prevValues, nextValues) => boolean | - || trigger | Сбор значения обновления по событию триггера | string | onChange | | validateTrigger | Настройка точки триггера с правилом валидации | string | string[] | onChange | | valuePropName | Настройка свойства отображения значения с элементом | string | value |

Список| Свойство | Описание | Тип | Значение по умолчанию |

| -------- | -------------------------------- | ------------------------------------------------------------------------------------------------------- | --------------------- | | name | Путь имени поля списка | NamePath[] | - | | children | Свойства рендера для списка полей | (fields: { name: NamePath }[], operations: ListOperations) => ReactNode | - |

Использование useForm

Компонент формы по умолчанию создает экземпляр формы с помощью Form.useForm. Но вы можете создать его и передать в компонент Form. Это позволяет вызывать некоторые функции на экземпляре формы.

const Demo = () => {
  const [form] = Form.useForm();
  return <Form form={form} />;
};
``

Для пользователей классовых компонентов вы можете использовать `ref`, чтобы получить экземпляр формы:

```jsx | pure
class Demo extends React.Component {
  setRef = form => {
    // Экземпляр формы здесь
  };
}  render() {
    return <Form ref={this.setRef} />;
  }
}
```| Свойство              | Описание                                | Тип                                                                       |
| ----------------- | ------------------------------------------ | -------------------------------------------------------------------------- |
| getFieldValue     | Получить значение поля по пути имени       | (name: [NamePath](#namepath)) => any                                       |
| getFieldsValue    | Получить список значений полей по списку путей имен | (nameList?: ([NamePath](#namepath)[]) => any) \| true                      |
| getFieldError     | Получить ошибки поля по пути имени        | (name: [NamePath](#namepath)) => string[]                                  |
| getFieldsError    | Получить список ошибок полей по списку путей имен | (nameList?: [NamePath](#namepath)[]) => FieldError[]                       |
| isFieldsTouched   | Проверить, были ли поля коснуты           | (nameList?: [NamePath](#namepath)[], allTouched?: boolean) => boolean      |
| isFieldTouched    | Проверить, был ли коснут определенный поле | (name: [NamePath](#namepath)) => boolean                                   |
| isFieldValidating | Проверить, валидируется ли поле            | (name: [NamePath](#namepath)) => boolean                                   |
| resetFields       | Сбросить статус полей                     | (fields?: [NamePath](#namepath)[]) => void                                 |
| setFields         | Установить статус полей                   | (fields: FieldData[]) => void                                              |
| setFieldsValue    | Установить значение полей                  | (values) => void                                                          |
| submit            | Вызвать отправку формы                    | () => void                                                                |
| validateFields    | Вызвать валидацию полей                    | (nameList?: [NamePath](#namepath)[], options?: ValidateOptions) => Promise |### FormProvider| Проп | Описание | Тип | Значение по умолчанию |
| ---------------- | ----------------------------------------- | ---------------------------------------- | ------- |
| validateMessages | Конфигурация глобального шаблона `validateMessages` | [ValidateMessages](#validatemessages) | -       |
| onFormChange     | Вызывается при изменении именованных полей формы | (name, { changedFields, forms }) => void | -       |
| onFormFinish     | Вызывается при завершении именованных полей формы | (name, { values, forms }) => void | -       |

## 📋 Интерфейс

### NamePath

| Тип                                     |
| ---------------------------------------- |
| string \| number \| (string \| number)[] |

### FieldData

| Проп | Тип                                     |
| ---------- | ---------------------------------------- |
| touched    | boolean                                  |
| validating | boolean                                  |
| errors     | string[]                                 |
| name       | string \| number \| (string \| number)[] |
| value      | any                                      |### Правило | Свойство        | Тип                                                                                            |
| --------------- | ----------------------------------------------------------------------------------------------- |
| enum            | any[]                                                                                           |
| len             | number                                                                                          |
| max             | number                                                                                          |
| message         | string                                                                                          |
| min             | number                                                                                          |
| pattern         | RegExp                                                                                          |
| required        | boolean                                                                                         |
| transform       | (value) => any                                                                                  |
| type            | string                                                                                          |
| validator       | ([rule](#rule), value, callback: (error?: string) => void, [form](#useform)) => Promise \| void |
| whitespace      | boolean                                                                                         |
| validateTrigger | string \| string[]                                                                              |

#### ВалидаторЧтобы сохранить синхронизацию с устаревшим использованием `validator` в `rc-form`, мы все еще предоставляем `callback` для запуска завершения валидации. Однако в `rc-field-form` мы настоятельно рекомендуем возвращать Promise вместо этого.

### Список операций

| Параметр | Тип                     |
| -------- | ----------------------- |
| add      | (initValue: any) => void |
| remove   | (index: number) => void  |

### Сообщения об ошибках

Сообщения об ошибках предоставляют список шаблонов ошибок. Вы можете посмотреть [здесь](https://github.com/react-component/field-form/blob/master/src/utils/messages.ts) для полного списка шаблонов по умолчанию.

| Параметр | Описание         |
| -------- | --------------- |
| enum     | Параметр `enum` правила |
| len      | Параметр `len` правила |
| max      | Параметр `max` правила |
| min      | Параметр `min` правила |
| name     | Имя поля          |
| pattern  | Параметр `pattern` правила |
| type     | Параметр `type` правила |

## Отличия от `rc-form`

`rc-field-form` пытается сохранить синхронизацию с `rc-form` на уровне API, но все же есть некоторые изменения:

### 1. Поле не будет синхронизироваться с `initialValues`, если оно не было изменено

В `rc-form` значение поля берется из `initialValues`, если пользователь не изменил его.
Это ошибка, но пользователи используют это как функцию, что делает исправление этой ошибки разрывом совместимости и мы должны сохранить это.
В `Field Form` эта ошибка больше не будет существовать. Если вы хотите изменить значение поля, используйте `setFieldsValue` вместо этого.### 2. Удаление поля не очистит связанное значение

Мы реализовали много логики для очистки значения при удалении поля. Однако, учитывая обратную связь пользователей, удаление существующего значения увеличивает дополнительную работу для возврата значения при условных полях.

### 3. Использование массива вместо строки для вложенных имен

В `rc-form` мы поддерживали имена вроде `user.name`, преобразуя значение в `{ user: { name: 'Bamboo' } }`. Это делает точку всегда маршрутом переменной, что заставляет разработчиков выполнять дополнительную работу, если имя действительно содержит точку, например `app.config.start` должно быть `app_config_start` и парситься обратно в точку при отправке.

`Field Form` будет использовать массив, например `['user', 'name']` для преобразования в `{ user: { name: 'Bamboo' } }`, и `user.name` для преобразования в `{ ['user.name']: 'Bamboo' }`.

### 4. Удаление `validateFieldsAndScroll`

Так как `findDomNode` помечен как предупреждение в [StrictMode](https://reactjs.org/docs/strict-mode.html#warning-about-deprecated-finddomnode-usage). Это кажется избыточным контролем над компонентом формы.
Мы решили удалить метод `validateFieldsAndScroll` и вы должны обрабатывать это самостоятельно.

```jsx
<Форма>
  <Поле name="username">
    <input ref={this.inputRef} />
  </Поле>
</Форма>

5. getFieldsError всегда возвращает массив

rc-form возвращает null, когда нет ошибок. Это заставляет пользователя писать дополнительный код, например:

if (errors === null) {
  errors = [];
}
``````js | pure
(form.getFieldsError('fieldName') || []).forEach(() => {
  // Do something...
});

Теперь getFieldsError будет возвращать [], если нет ошибок.

6. Удаление callback с validateFields

Так как ES8 поддерживает async/await, нет причин не использовать его. Теперь вы можете легко обрабатывать логику валидации:

async function() {
  try {
    const values = await form.validateFields();
    console.log(values);
  } catch (errorList) {
    errorList.forEach(({ name, errors }) => {
      // Do something...
    });
  }
}

Внимание: Теперь, если ваш валидатор возвращает Error(message), нет необходимости получать ошибку через e => e.message. Форма будет обрабатывать это.

7. preserve по умолчанию установлено на false

В rc-form вы должны использовать preserve, чтобы сохранять значение, так как форма автоматически удаляет значение из поля, если поле удалено. Форма всегда сохраняет значение, независимо от удаления поля. Но вы все еще можете использовать preserve=false, чтобы отключить сохранение значений с версии 1.5.0.

8. setFields не вызывает onFieldsChange и setFieldsValue не вызывает onValuesChange

В rc-form мы хотели помочь пользователям автоматически вызывать события изменения, чтобы сделать диспатч redux-действий проще, но это не является хорошим дизайном, так как это привязывает логику кода.

Кроме того, управление триггерами событий onFieldsChange и onValuesChange пользователями имеет потенциальную угрозу возникновения бесконечных циклов.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Реакт перформанс фор компонент. Развернуть Свернуть
TSX и 3 других языков
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors_react-component-field-form.git
git@api.gitlife.ru:oschina-mirror/mirrors_react-component-field-form.git
oschina-mirror
mirrors_react-component-field-form
mirrors_react-component-field-form
master