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

OSCHINA-MIRROR/wengcd-react-start-kit-flux-demo

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
react-style-guide.md 4.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 15:51 af1ad34

React Style Guide

Структура папок

  • Помещайте каждый компонент в отдельную папку.
  • Избегайте использования общих ресурсов между компонентами (CSS, изображения и т. д.).
  • Храните все папки компонентов в одной родительской папке (избегайте вложения).

Пример структуры файлов для компонента:

/src/components/Navigation/icon.svg
/src/components/Navigation/Navigation.css
/src/components/Navigation/Navigation.js
/src/components/Navigation/Navigation.test.js
/src/components/Navigation/Navigation.ru-RU.css
/src/components/Navigation/package.json

Для получения дополнительной информации воспользуйтесь поиском Google по запросу «component-based UI development».

Имена классов CSS

Используйте подход BEM для именования классов CSS. Также можно обратиться к SUIT CSS для вдохновения.

// CSS
.ComponentName { }
.ComponentName--modifier { }
.ComponentName-elementName { }
.ComponentName-elementName--modifier { }

Пример стилизации CSS:

// JSX
<nav className="Navigation">
  <ul className="Navigation-items">
    <li className="Navigation-item Navigation-item--selected">
      <a className="Navigation-link" href="/products">Products</a>
    </li>
    <li className="Navigation-item">
      <a className="Navigation-link" href="/services">Services</a>
    </li>
  </ul>
</nav>
// CSS
@import '../variables.css';

.Navigation {
  &-items {
    margin: 0;
    padding: 0;
    list-style-type: none;
    text-align: center;
  }

  &-item {
    display: inline-block;
    vertical-align: top;
  }

  &-link {
    display: block;
    padding: 0 25px;
    outline: 0;
    border: 0;
    color: @default-color;
    text-decoration: none;
    line-height: 25px;
    transition: background-color .3s ease;

    &,
    .Navigation-items:hover & {
      background: var(--default-bg-color);
    }

    &--selected,
    .Navigation-items:hover &:hover {
      background: var(--active-bg-color);
    }
  }
}

React компоненты

  • Используйте транспайлер Babel для исходного кода.
  • Для создания новых React компонентов используйте классы ES6.
  • Чтобы расширить функциональность существующих компонентов, используйте высокоуровневые компоненты.

Пример компонента React:

import './SampleComponent.css';
import React, { Component } from 'react';

class SampleComponent extends Component {

  static propTypes = { ... };

  static defaultProps = { ... };

  constructor() {
    super();
    this.state = { ... };
  }

  componentDidMount() {
    // ...
  }

  componentWillUnmount() {
    // ...
  }

  shouldComponentUpdate() {
    // ...
  }

  render() {
    return (
      <div className="SampleComponent">
      </div>
    );
  }

}

export default SampleComponent;

Поместите пользовательские методы и свойства в конец файла после метода render().

Пример высокоуровневого компонента React:

// withViewport.js
import React, { Component } from 'react';
import { canUseDOM } from 'fbjs/lib/ExecutionEnvironment';

function withViewport(ComposedComponent) {
  return class WithViewport extends Component {

    constructor() {
      super();

      this.state = {
        viewport: canUseDOM ?
          {width: window.innerWidth, height: window.innerHeight} :
          {width: 1366, height: 768} // Default size for server-side rendering
      };
      this.handleResize = this.handleResize.bind(this);
    }

    componentDidMount() {
      window.addEventListener('resize', this.handleResize);
      window.addEventListener('orientationchange', this.handleResize);
    }

    componentWillUnmount() {
      window.removeEventListener('resize', this.handleResize);
      window.removeEventListener('orientationchange', this.handleResize);
    }

    render() {
      return <ComposedComponent {...this.props} viewport={this.state.viewport}/>;
    }

    handleResize() {
      let viewport = {width: window.innerWidth, height: window.innerHeight};
      if (this.state.viewport.width !== viewport.width || ```
this.state.viewport.height !== viewport.height) {
  this.setState({viewport: viewport});
}
};
// MyComponent.js
import React from 'react';
import withViewport from './withViewport';

@withViewport
class MyComponent {
  render() {
    let { width, height } = this.props.viewport;
    return <div>{'Viewport: ' + width + 'x' + height}</div>;
  }
}

export default MyComponent;

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/wengcd-react-start-kit-flux-demo.git
git@api.gitlife.ru:oschina-mirror/wengcd-react-start-kit-flux-demo.git
oschina-mirror
wengcd-react-start-kit-flux-demo
wengcd-react-start-kit-flux-demo
master