Публикация компонентов React из проекта NextJS для повторного использования в другом.

Next.js - самый популярный фреймворк React для разработки приложений рендеринга на стороне сервера React.

Это руководство поможет вам разработать повторно используемые компоненты React, которые можно использовать в разных проектах и ​​репозиториях с помощью платформы Bit.

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



Создание повторно используемого компонента списка карточек

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

Эти компоненты будут стилизованы с помощью styled-components. Мы выделим кнопку и карточку в отдельный компонент, чтобы их можно было использовать отдельно вне списка карточек:

Перед началом работы убедитесь, что на вашем компьютере установлена ​​Node.js версии 10.3 или более поздней. Давайте установим новое новое приложение Next с помощью терминала:

npx create-next-app
# or
yarn create next-app

Внутри вашего каталога Next создайте новый каталог с именем components/, в котором будут размещены все ваши повторно используемые компоненты.

Пришло время разработать наши компоненты. Начнем с разработки StyledButton компонента. Это простой компонент с реквизитами для функций Title и onClick:

import React from 'react';
import styled from 'styled-components';
import PropTypes from 'prop-types';
const Button = styled.button`
  cursor: pointer;
  background: #DB7093;
  color: white;
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border: 2px solid #DB7093;
  border-radius: 3px;
&:hover{
    background: #C16482;
    border: 2px solid #C16482;
  }
`;
const StyledButton = ({
  title,
  onClick,
}) => (
  <Button onClick={onClick}>{title}</Button>
)
StyledButton.propTypes = {
  /**
   * button title
   */
  title: PropTypes.string.isRequired,
  /**
   * on click function
   */
  onClick: PropTypes.func.isRequired,
};
export default StyledButton;

Затем нам нужно написать компонент StyledCard, который использует компонент StyledButton. Этот компонент будет иметь свойства image, title, date и description, которые будут отображаться как карточка.

Мы передадим свойства StyledButton title и onClick через этот компонент, используя свойства buttonTitle и buttonClick:

import React from 'react'
import styled from 'styled-components'
import PropTypes from 'prop-types'
import StyledButton from '../StyledButton'
const StyledContainer = styled.div`
  border: 1px solid #C16482;
  padding: 25px 12px 18px;
  margin: 25px 20px;
};
`
const StyledImg = styled.img`
  width: 100%;
  height: 100%;
  object-fit: cover;
  border: 1px solid #C16482;
`
const Title = styled.h2`
  color: #C16482;
  font-weight: 300;
  @media (max-width: 500px) {
    font-size: 1rem;
  }
`
const Date = styled.div`
  color: #ccc;
  font-weight: 300;
  margin: 6px 0;
  @media (max-width: 500px) {
    font-size: 0.8rem;
  }
`
const Description = styled.p`
  color: #C16482;
  font-weight: 300;
  @media (max-width: 500px) {
    font-size: 0.75rem;
  }
`
const StyledCard = ({
  image,
  title,
  date,
  description,
  buttonTitle,
  buttonClick
}) => (
  <StyledContainer>
    <StyledImg src={image} />
    <Title>{title}</Title>
    <Date>{date}</Date>
    <Description>{description}</Description>
    <StyledButton title={buttonTitle} onClick={buttonClick} />
  </StyledContainer>
)
StyledCard.propTypes = {
  /**
   * post image
   */
  image: PropTypes.string.isRequired,
  /**
   * post title
   */
  title: PropTypes.string.isRequired,
  /**
   * date
   */
  date: PropTypes.string.isRequired,
  /**
   * short description of the post
   */
  description: PropTypes.string.isRequired,
  /**
   * Title for the button
   */
  buttonTitle: PropTypes.string.isRequired,
  /**
   * on click function for the button
   */
  buttonClick: PropTypes.func.isRequired,
};
export default StyledCard

Наконец, мы будем использовать StyledCard внутри StyledCardList компонента. Этот компонент примет одну опору массива, содержащую список сообщений, которые будут отображаться компонентом:

import React from 'react';
import styled from 'styled-components'
import PropTypes from 'prop-types';
import StyledCard from '../StyledCard';
const StyledContainer = styled.div`
  max-width: 750px;
  padding: 50px 12px;
  width: 100%;
  margin: auto;
`
const StyledCardList = ({postList}) => {
  return (
    <StyledContainer>
    {postList.map(post => (
        <StyledCard
          key={post.id}
          image={post.image}
          title={post.title}
          date={post.date}
          description={post.description}
          buttonTitle={post.buttonTitle}
          buttonClick={post.buttonClick}
        />
    ))}
    </StyledContainer>
  );
};
StyledCardList.propTypes = {
  /**
   * A list of posts to render
   */
  postList: PropTypes.arrayOf(
    PropTypes.shape({
      id: PropTypes.number,
      image: PropTypes.string,
      title: PropTypes.string,
      date: PropTypes.string,
      description: PropTypes.string,
      buttonTitle: PropTypes.string,
      buttonClick: PropTypes.func,
    })
  ),
};
export default StyledCardList;

Вы можете протестировать компонент StyledCardList, предоставив ему фиктивные данные и отобразив его внутри pages/index.js:

const postList = [
  {
    id: 1,
    image: "https://picsum.photos/id/134/300/200",
    title : "My First Post",
    date : "06/26/2020",
    description : "This is my first post. Hello World!",
    buttonTitle : "Read this post",
    buttonClick : () => alert("This should take you to the post link")
  },
  {
    id: 2,
    image: "https://picsum.photos/id/5/300/200",
    title : "My Second Post",
    date : "06/27/2020",
    description : "This is my second post. Keep up the rythm!",
    buttonTitle : "Read this post",
    buttonClick : () => alert("This should take you to the post link")
  }
]
// render the postList into StyledCardList component
<StyledCardList postList={postList} />

Теперь, когда мы разобрались с нашими компонентами, мы можем начать публиковать наши компоненты на платформе Bit, чтобы другие проекты могли использовать их повторно.

Регистрация компонентов в Bit

Чтобы начать публикацию компонентов в Bit, вам необходимо зарегистрировать бесплатную учетную запись. После регистрации создайте новую коллекцию для сохранения компонентов:

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

Давайте начнем публиковать наши компоненты в Bit. Откройте свой терминал и установите инструмент Bit terminal:

npm install bit-bin --global

После завершения установки вернитесь в терминал следующего проекта и инициализируйте новое рабочее пространство Bit:

bit init

Эта команда сгенерирует для вас следующий ресурс:

  • Конфигурация битового рабочего пространства внутри package.json
  • Растровое изображение компонентов с .bitmap файлом

В вашем package.json файле вы увидите новую bit конфигурацию, подобную этой:

"bit": {
    "componentsDefaultDirectory": "components/{name}",
    "packageManager": "npm"
  }

Далее вам необходимо войти в свою учетную запись Bit из терминала:

bit login

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

Чтобы начать процесс публикации, добавьте свои компоненты с помощью команды bit add:

bit add components/*

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

bit status

Перед публикацией компонентов необходимо убедиться, что эти компоненты используются другими проектами и не содержат ошибок. Вы можете сделать это, собрав эти компоненты с помощью компилятора Bit для React:

bit import bit.envs/compilers/react --compiler
bit build

Компилятор Bit’s React соберет ваши компоненты в изолированной среде, чтобы убедиться, что сборка также будет успешной в облаке или в любом другом репозитории.

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

bit tag --all 0.0.1

Команда пометит все отслеживаемые компоненты как готовые к публикации как версию 0.0.1. Если вы опустите версию, Bit просто пометит ближайшую следующую версию ваших компонентов.

Хорошо, теперь, когда у нас есть компоненты, помеченные тегами, давайте опубликуем их в коллекции Bit с помощью команды bit export и полного имени коллекции, структурированного как <username>.<collection>:

bit export nsebhastian.post-card-components

После этого вы можете посетить веб-сайт bit.dev и увидеть свои компоненты, опубликованные внутри коллекции, которую вы создали ранее.

Если вы нажмете на один из компонентов, вы увидите, что у Bit есть игровая площадка, которая отображает компонент, поэтому вы можете увидеть, как работает компонент, без необходимости загружать и устанавливать его локально:

Bit также обнаруживает использование prop-types в вашем коде React и генерирует документацию на его основе. Вы можете увидеть документацию чуть ниже игровой площадки:

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

Теперь, когда ваши компоненты опубликованы на Bit, вы готовы повторно использовать их в других проектах на основе React, помимо NextJS, включая проекты, использующие Gatsby или Electron. Просто установите компонент, используя свой любимый менеджер пакетов:

npm i @bit/nsebhastian.post-card-components.styled-card-list
#or
yarn add @bit/nsebhastian.post-card-components.styled-card-list

И импортируйте компонент в свое приложение:

import StyledCardList from '@bit/nsebhastian.post-card-components.styled-card-list';
const App = () => {
  return(
    <StyledCardList postList={postList} />
  )
}

Если вы хотите импортировать компоненты других людей и настроить их в соответствии со своими потребностями, вы можете сделать это с помощью команды bit import. Обратите внимание, как формат отличается от установки с помощью диспетчеров пакетов:

bit import nsebhastian.post-card-components/styled-card-list

По умолчанию компонент будет установлен в каталог components/. Вот ссылка на завершенный репозиторий Next.js app.

Заключение

Вы узнали, как публиковать и публиковать компоненты React на платформе Bit. После публикации вы можете повторно использовать эти компоненты в другом проекте, установив их через свой любимый менеджер пакетов или Bit. Очень аккуратный!

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

Учить больше