[css] React.js 인라인 스타일 모범 사례
다음과 같이 React 클래스 내에서 스타일을 지정할 수 있습니다.
var MyDiv = React.createClass({
render: function() {
var style = {
color: 'white',
fontSize: 200
};
return <div style={style}> Have a good and productive day! </div>;
}
});
이 방법으로 모든 스타일을 지정하고 CSS 파일에 스타일을 지정하지 않아야합니까?
아니면 인라인 스타일을 완전히 피해야합니까?
스타일을 조정할 때 두 곳을 확인해야 할 것입니다.
답변
아직 “모범 사례”는 많지 않습니다. React 구성 요소에 인라인 스타일을 사용하는 사람들은 여전히 실험 중입니다.
인라인 스타일 lib 비교 차트에 반응 하는 방식은 매우 다양합니다.
전부 아니면 아무것도?
“스타일”이라고하는 것은 실제로 몇 가지 개념을 포함합니다.
- 레이아웃 — 요소 / 구성 요소가 다른 요소와 관계가있는 방식
- 모양 — 요소 / 구성 요소의 특성
- 동작 및 상태 — 특정 상태에서 요소 / 구성 요소가 보이는 방식
상태 스타일로 시작
React는 이미 구성 요소의 상태를 관리 하고 있습니다. 구성 요소 논리와의 배치에 자연스럽게 적합합니다.
조건부 상태 클래스로 렌더링 할 구성 요소를 구축하는 대신 상태 스타일을 직접 추가하는 것이 좋습니다.
// Typical component with state-classes
<li
className={classnames({ 'todo-list__item': true, 'is-complete': item.complete })} />
// Using inline-styles for state
<li className='todo-list__item'
style={(item.complete) ? styles.complete : {}} />
우리는 스타일을 표현 하기 위해 클래스를 사용하고 있지만 더 이상 상태와 행동에.is-
접두사 클래스를 사용하지 않습니다. .
우리는 사용할 수 있습니다 Object.assign
(ES6) 또는 _.extend
(밑줄 / lodash가) 여러 국가에 대한 지원을 추가 할 :
// Supporting multiple-states with inline-styles
<li 'todo-list__item'
style={Object.assign({}, item.complete && styles.complete, item.due && styles.due )}>
커스터마이징 및 재사용
이제 우리는 Object.assign
그것을 사용하여 구성 요소를 다른 스타일로 재사용 할 수있게하는 것이 매우 간단 해졌습니다. 기본 스타일을 재정의하려면 콜 사이트에서 소품을 사용하여 다음과 같이 할 수 <TodoItem dueStyle={ fontWeight: "bold" } />
있습니다. 다음과 같이 구현되었습니다.
<li 'todo-list__item'
style={Object.assign({},
item.due && styles.due,
item.due && this.props.dueStyles)}>
나열한 것
개인적으로 인라인 레이아웃 스타일에 대한 설득력있는 이유는 없습니다. 많은 훌륭한 CSS 레이아웃 시스템이 있습니다. 하나만 사용하겠습니다.
즉, 레이아웃 스타일을 구성 요소에 직접 추가하지 마십시오. 컴포넌트를 레이아웃 컴포넌트로 감싸십시오. 다음은 예입니다.
// This couples your component to the layout system
// It reduces the reusability of your component
<UserBadge
className="col-xs-12 col-sm-6 col-md-8"
firstName="Michael"
lastName="Chan" />
// This is much easier to maintain and change
<div class="col-xs-12 col-sm-6 col-md-8">
<UserBadge
firstName="Michael"
lastName="Chan" />
</div>
레이아웃 지원을 위해 종종 구성 요소를 100%
width
및 로 디자인하려고합니다 height
.
외관
이것은 “인라인 스타일”토론에서 가장 논쟁이 많은 부분입니다. 궁극적으로 JavaScript를 사용하여 디자인하는 구성 요소와 팀의 편의에 달려 있습니다.
한 가지 확실한 것은 도서관의 도움이 필요하다는 것입니다. 원시 React에서 브라우저 상태 ( :hover
, :focus
) 및 미디어 쿼리는 고통 스럽습니다.
이 어려운 부분의 구문은 SASS의 구문을 모델링하도록 설계 되었기 때문에 Radium을 좋아 합니다.
코드 구성
종종 모듈 외부에 스타일 객체가 나타납니다. 할 일 목록 구성 요소의 경우 다음과 같이 보일 수 있습니다.
var styles = {
root: {
display: "block"
},
item: {
color: "black"
complete: {
textDecoration: "line-through"
},
due: {
color: "red"
}
},
}
게터 함수
템플릿에 스타일 로직을 추가하면 위와 같이 약간 지저분해질 수 있습니다. 스타일을 계산하기 위해 getter 함수를 만들고 싶습니다.
React.createClass({
getStyles: function () {
return Object.assign(
{},
item.props.complete && styles.complete,
item.props.due && styles.due,
item.props.due && this.props.dueStyles
);
},
render: function () {
return <li style={this.getStyles()}>{this.props.item}</li>
}
});
더보고
올해 초 React Europe : Inline Styles 및 ‘CSS 만 사용하는 것이 가장 좋은시기’ 에서이 모든 것들에 대해 자세히 설명했습니다 .
당신이 길을 따라 새로운 발견을 같이 내가 도와 드리겠습니다 🙂 나를 때려 -> @chantastic
답변
React의 스타일 속성은 값이 객체, 즉 키 값 쌍일 것으로 예상합니다.
style = {}
그 안에 또 다른 물체가 있어야 {float:'right'}
작동합니다.
<span style={{float:'right'}}>{'Download Audit'}</span>
이것이 문제를 해결하기를 바랍니다.
답변
React 구성 요소 내에서 인라인 스타일을 광범위하게 사용합니다. 구성 요소 내에서 스타일을 배치하는 것이 훨씬 더 명확하다는 것을 알았습니다. 구성 요소의 스타일과 스타일이 항상 명확하기 때문입니다. 또한 Javascript의 모든 기능을 사용하면보다 복잡한 스타일링 요구 사항을 단순화 할 수 있습니다.
처음에는 확신하지 못했지만 몇 달 동안 손을 대면 완전히 변환되어 모든 CSS를 인라인 또는 기타 JS 중심 CSS 메소드로 변환하는 중입니다.
Facebook 직원과 React 기고자 “vjeux”의 프레젠테이션은 매우 유용합니다. https://speakerdeck.com/vjeux/react-css-in-js
답변
스타일 속성의 주요 목적은 동적 상태 기반 스타일을위한 것입니다. 예를 들어, 일부 상태에 따라 진행률 표시 줄에 폭 스타일이 있거나 다른 것에 따라 위치 또는 가시성이있을 수 있습니다.
JS의 스타일은 애플리케이션이 재사용 가능한 컴포넌트에 사용자 정의 스타일을 제공 할 수 없다는 제한을 부과합니다. 위에서 언급 한 상황에서는 완벽하게 허용되지만 가시적 특성, 특히 색상을 변경하는 경우에는 적합하지 않습니다.
답변
James K Nelson은 “자바 스크립트로 구성 요소를 스타일링하지 말아야하는 이유” 라는 편지에서 실제로 인라인 스타일을 단점과 함께 사용할 필요가 없다고 말합니다. 그의 말은 더 적은 / scss를 가진 오래된 지루한 CSS가 가장 좋은 해결책이라고합니다. 그의 논문의 일부는 CSS에 유리합니다.
- 외부로 확장 가능
- 레버리지 가능 (인라인 스타일이 모든 것을 겹쳐 감)
- 디자이너 친화적
답변
JSX의 스타일링은 HTML의 스타일링과 매우 유사합니다.
HTML 사례 :
div style = “배경색 : 빨간색; 색 : 흰색”
JSX 사례 :
div style = {{backgroundColor : ‘red’, 색상 : ‘white’}}
답변
내가하는 일은 재사용 가능한 구성 요소 각각에 고유 한 사용자 정의 요소 이름을 부여한 다음 해당 구성 요소에 대한 CSS 파일을 작성하는 것입니다.
var MyDiv = React.createClass({
render: function() {
return <custom-component style={style}> Have a good and productive day! </custom-component>;
}
});
‘custom-component.css’파일에서 모든 항목은 custom-component 태그로 시작합니다.
custom-component {
display: block; /* have it work as a div */
color: 'white';
fontSize: 200;
}
custom-component h1 {
font-size: 1.4em;
}
즉, 분리 문제에 대한 비판적 개념을 잃지 않습니다. 보기 대 스타일. 구성 요소를 공유하면 다른 사용자가 구성 요소를 나머지 웹 페이지와 일치시키기가 더 쉽습니다.