SlideShare a Scribd company logo
Как запилить 80 React форм
и иногда бывать дома
Создание React форм с помощью Json Schema
C чего все начиналось
3
- Сколько будет форм?
- Не знаем!
- Как будут выглядеть?
- Не знаем!
4
Как скажете!
5
6
Требования сами
придумаем
• Должны строиться динамически
• Конечно, есть ролевая система
• Клиентская валидация
• Цена добавления новой фичи
• Принцип автобуса
7
Пути решения • jQuery
8
9
Пути решения
• Redux-Form
• Formsy-React
• React-Form
• React-jsonschema-form
10
React-jsonschema-
form
Клиентская библиотека для построения
форм основе jsonSchema
https://github.com/mozilla-services/react-
jsonschema-form
11
12
Что такое Json-
schema?
Json-schema— это стандарт описания
структур данных в формате JSON,
разрабатываемый на основе XML-
schema
или простыми словами это валидатор
данных
13
Простой пример
JSON SCHEMA
const schema = {
type: 'object',
properties: {
stringField: {
type: 'string',
},
numberField: {
type: 'number',
},
boolField: {
type: 'boolean',
},
},
};
const formData = {
stringField: 'user',
numberField: 123,
boolean: true,
}
14
Вложенные объекты
JSON SCHEMA
const schema = {
type: 'object',
properties: {
objectField: {
type: 'object',
properties: {
childField_1: {
type: 'string',
},
childField_2: {
type: 'number',
},
},
},
},
};
const formData = {
objectField: {
childField_1: 'user',
childField_2: 234,
},
};
15
Массивы
JSON SCHEMA
const schema = {
type: 'object',
properties: {
arrayField: {
type: 'array',
items: {
type: 'string',
},
},
},
};
const formData = {
arrayField: ['arr1', 'arr2', 'arr3'],
};
16
17
Валидация формы с
помощью jsonSchema
18
Данные формы
Валидация формы с помощью jsonSchema
const formData = {
login: 'Ivan',
password: 'password',
};
19
Описание структуры формы
Валидация формы с помощью jsonSchema
const schema = {
type: 'object',
properties: {
login: {
type: 'string',
},
password: {
type: 'string',
},
},
required: ['login', 'password'],
};
20
Код валидации
Валидация формы с помощью jsonSchema
npm install jsonschema;
import {validate} from 'jsonschema';
const result = validate(formData, schema);
console.log(result);
21
Результат валидации
Валидация формы с помощью jsonSchema
const result = {
errors: [],
instance: {
login: 'Ivan',
password: 'password',
},
schema: {
type: 'object',
properties: {
login: {
type: 'string',
},
password: {
type: 'string',
},
},
required: ['login', 'password'],
},
};
22
23
Данные формы
Валидация формы с помощью jsonSchema
const formData = {
login: 'Ivan',
password: 'password',
};
24
Неправильные данные формы
Валидация формы с помощью jsonSchema
const formData = {
login: 'Ivan',
};
25
Код валидации
Валидация формы с помощью jsonSchema
npm install jsonschema;
import {validate} from 'jsonschema';
const result = validate(formData, schema);
console.log(result);
26
Результат валидации
Валидация формы с помощью jsonSchema
const result = {
errors: [
{
property: "instance",
message: 'requires property "password"',
schema: {...},
instance: {...},
name: "required",
argument: "password",
stack: "requires property "password",
},
],
};
27
Виды валидации
28
Виды валидации
maxLength – максимальная длина строки
minLength – минимальная длина строки
max – максимальное значение числа
min – минимальное значение числа
pattern – регулярное выражение
const schema = {
type: 'object',
properties: {
login: {
type: 'string',
maxLength: '10',
minLength: '2',
},
count: {
type: 'number',
max: 10,
min: 2,
},
email: {
type: 'string',
pattern: 'd+',
},
},
};
29
React-jsonschema-
form
Клиентская библиотека для построения
форм на основе jsonschema
https://github.com/mozilla-services/react-
jsonschema-form
30
Основные props
React-jsonschema-form
const myForm = {
schema: {...},
uiSchema: {...},
formData: {...},
};
31
Schema в React-jsonschema-
form
React-jsonschema-form
const schema = {
type: 'object',
properties: {
login: {
type: 'string',
},
password: {
type: 'string',
},
},
};
32
uiSchema в React-jsonschema-
form
React-jsonschema-form
const uiSchema = {
firstName: {
'ui:widget': 'text',
},
password: {
'ui:widget': 'password',
},
};
33
formData в React-jsonschema-
form
React-jsonschema-form
const formData = {
login: 'Ivan',
password: 'password',
};
34
formData в React-jsonschema-form
React-jsonschema-form
import JsonSchemaForm from 'react-
jsonschema-form';
const schema = {
type: 'object',
required: ['login', 'password'],
properties: {
login: {
type: 'string',
},
password: {
type: 'string',
},
},
};
<JsonSchemaForm schema={schema} />;
35
Кому нужны такие
формы?
36
Кастомизация
компонентов
37
Простая форма
Кастомизация компонентов
const schema = {
type: 'object',
properties: {
firstName: {
type: 'string',
title: 'First name',
},
},
};
38
Простая форма
Кастомизация компонентов
const uiSchema = {
firstName:
'ui:widget': ({ onChange, value }) => (
<input
type={'text'}
style={{ backgroudColor: 'red' }}
onChange={onChange}
value={value}
/>
),
},
};
39
40
Плюсы
React-jsonschema-
form
• Динамическое построение форм
• Динамическая валидация
• Возможность кастомизации вывода
компонентов
41
Минусы
React-jsonschema-
form
• React-json-schema – умный компонент, не
дружит с Redux
• Нет возможности связывать поля
42
И что с этим делать?
43
44
45
46
47
48
49
Всем спасибо!
50
Мои контакты
• 4456784345 (ICQ)
• i.sychev (Мой мир)
• i.sychev (Одноклассники)
• i.sychev (Спрашивай.ру)
https://goo.gl/RMTbdQ
51
https://goo.gl/RMTbdQ
• Json Schema http://json-schema.org/
• Redux-form https://redux-form.com/
• React-jsonschema-form https://github.com/mozilla-services/react-jsonschema-
form
52

More Related Content

PDF
Svyatoslav Login "360 View of XSS"
PDF
СВЯТ ЛОГИН «Як провести пошук на xss атаку» Online QADay 2020 #2
PDF
Алексей Андросов - Debugger: Отладка кода
PDF
Maksim Shirshin
PPTX
Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться
PDF
Суперсилы Chrome developer tools
PDF
Максим Ширшин "SVARX, или Борьба с большими формами"
PDF
Быстро о быстром
Svyatoslav Login "360 View of XSS"
СВЯТ ЛОГИН «Як провести пошук на xss атаку» Online QADay 2020 #2
Алексей Андросов - Debugger: Отладка кода
Maksim Shirshin
Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться
Суперсилы Chrome developer tools
Максим Ширшин "SVARX, или Борьба с большими формами"
Быстро о быстром

What's hot (19)

PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PPTX
Основы MongoDB + NodeJS
PDF
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
PPTX
Основы JS
PDF
06 HappyDev-lite-2015 autumn. Андрей Юдин. JavaScript. Аспекты применения в с...
PDF
По-настоящему ВИЗУАЛЬНОЕ построение лендинг-страниц на WP Gutenberg!
PDF
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
PPT
Problem 1
PDF
Knockoutjs на примере 2ГИС-Онлайн
PPTX
Михаил Боднарчук Современное функциональное тестирование с Codeception
PPTX
JavaScript: хороший тон клиентской разработки
PDF
Не бойся, это всего лишь данные... просто их много
PPTX
Async Javascript
PDF
Роман Бунин
PDF
Внутреннее устройство и оптимизация бандла webpack
PDF
Kranonit s16 (python). dmitry furzenko
PPTX
Windows Azure and node js
PDF
Rambler.iOS #8: Как не стать жертвой бэкендеров
PDF
Александр Тармолов "БЭМ и JavaScript: Тестирование"
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
Основы MongoDB + NodeJS
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Основы JS
06 HappyDev-lite-2015 autumn. Андрей Юдин. JavaScript. Аспекты применения в с...
По-настоящему ВИЗУАЛЬНОЕ построение лендинг-страниц на WP Gutenberg!
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
Problem 1
Knockoutjs на примере 2ГИС-Онлайн
Михаил Боднарчук Современное функциональное тестирование с Codeception
JavaScript: хороший тон клиентской разработки
Не бойся, это всего лишь данные... просто их много
Async Javascript
Роман Бунин
Внутреннее устройство и оптимизация бандла webpack
Kranonit s16 (python). dmitry furzenko
Windows Azure and node js
Rambler.iOS #8: Как не стать жертвой бэкендеров
Александр Тармолов "БЭМ и JavaScript: Тестирование"
Ad

Similar to Как запилить 80 React форм и иногда бывать дома (20)

PPTX
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
PDF
Семь тысяч Rps, один go
PPT
Web осень 2012 лекция 4
PDF
Максим Ширшин "SVARX: фреймворк для семантической валидации форм"
PDF
Пластилиновый код: как перестать кодить и начать жить
PPT
Web весна 2013 лекция 4
PDF
Js templating stepan_reznikov
PDF
Степан Резников "Шаблонизация на клиенте"
PDF
Being SOLID
PDF
Консервативный Backend на Node.js / Дмитрий Ляпин (Recrumatic)
PDF
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
PDF
Как выглядит современный фронтенд
PPTX
Как мы уменьшили сложность наших проектов
ODP
Scorex framework
PPTX
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
PPTX
Статический анализ кода
PPTX
статический анализ кода
PDF
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
PPTX
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PPTX
Контрактное программирование
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Семь тысяч Rps, один go
Web осень 2012 лекция 4
Максим Ширшин "SVARX: фреймворк для семантической валидации форм"
Пластилиновый код: как перестать кодить и начать жить
Web весна 2013 лекция 4
Js templating stepan_reznikov
Степан Резников "Шаблонизация на клиенте"
Being SOLID
Консервативный Backend на Node.js / Дмитрий Ляпин (Recrumatic)
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
Как выглядит современный фронтенд
Как мы уменьшили сложность наших проектов
Scorex framework
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
Статический анализ кода
статический анализ кода
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
Контрактное программирование
Ad

Как запилить 80 React форм и иногда бывать дома