Skip to content

Безкоштовна платформа підготовки до ЗНО, на якій можна знайти авторські покрокові пояснення та динамічне проходження тестів

Notifications You must be signed in to change notification settings

mavka-org/mavka-web

Repository files navigation

Разделение и группировка кода

Внутри папки components мы группируем файлы по модулям

picture

Когда компонент состоит из более чем одного файла, мы кладем этот компонент и его файлы в папку с тем же именем. Например: вы имеете Form.css, содержащий Form.jsx стили. В

picture 2

этом случае структура будет выглядеть так:

!!!

Тестовые файлы остаются с проверяемым файлом. В приведенном выше случае, тест для Form.jsx останется в той же папке и будет называться Form.spec.jsx

!!!

Компоненты пользовательского интерфейса

Помимо разделения компонентов на модули, добавим папку UI в src/components, чтобы сохранить в ней наши общие компоненты.

UI Components это настолько общие компоненты, что они не принадлежат конкретному модулю. Эти компоненты вы можете выделить в отдельную библиотеку, потому что они не имеют бизнес логики. Примером таких компонентов могут быть: Buttons, Inputs, Checkboxes, Selects, Modals, Data display elements, и т.д.

Именование компонентов

Когда мы говорим об именовании компонента, это относится к имени, которое мы даем классу или переменной, определяющей компонент:

class MyComponent extends Component {
}
const MyComponent () => {};

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

Имена компонентов очень удобны для отладки, когда мы используем инструменты, такие как React Dev Tools, и когда происходят run time errors. Ошибки всегда содержат имя компонента, в котором они произошли.

При именовании компонентов мы следуем паттерну path-based-component-naming, который содержит в названии компонент соответствующий его относительному пути для папки components или src, если вы находитесь вне папки components. Например компонент находящийся в папке components/User/List.jsx должен быть назван UserList

Если файл находится в папке с таким же именем, то нам не нужно повторять его. То есть components/User/Form/Form.jsx должен быть назван UserForm, а не UserFormForm.

Экраны

Название говорит само за себя, будем называть им экраны в нашем приложении.

Экран — это место, где вы используете компоненты, для составления их в страницу. В идеале экран не должен хранить никакой логики и должен быть функциональным компонентом.

Мы сохраняем экраны в отдельной папке, находящейся в src, потому что они будут сгруппированы в соответствии с маршрутом, а не модулем:

picture 3

Router

Объясню на примере: Мы хотим, чтобы по ссылке mavka/znoMatan/ запускался компонент ZnoMatan.

Открываем файл Root.jsx и прописываем следующие:

import ZnoMatan from PATH to ZnoMatan(e.g. './User/Form');

<Route path="/znoMatan" component={ZnoMatan} />

Больше информации тут: тык

Импорт компонентов

Одним из недостатков этой структуры каталогов является то, что для импорта компонентов требуется импортировать полный путь, например:

import Login from 'components/Login/Login''

Но мы хотели бы написать следующее:

import Login from 'components/Login'

Решение, с которым мы столкнулись, использует стандартный разрешающий механизм Node.js, что делает его надежным. Нам лишь нужно добавить файл package.json в файловую структуру.

И внутри package.json мы используем основное свойство, чтобы установить нашу точку входа в компонент, например:
{ "main": "Login.js" }

С этим дополнением мы можем импортировать компонент следующим образом:

import Login from 'components/Login'

Assets

В assets храним практически любые медиа файлы, от файлов изображений, таких как jpg и gif, до видео-файлов, таких как wmv и mov, и, конечно, стандартных файлов документов, таких как ppt и docs.

CSS стили храним в самой компоненте в components

About

Безкоштовна платформа підготовки до ЗНО, на якій можна знайти авторські покрокові пояснення та динамічне проходження тестів

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published