React Style Guide
/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».
Используйте подход BEM для именования классов CSS. Также можно обратиться к SUIT CSS для вдохновения.
// CSS
.ComponentName { }
.ComponentName--modifier { }
.ComponentName-elementName { }
.ComponentName-elementName--modifier { }
// 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);
}
}
}
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().
// 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 )