[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;
}

즉, 분리 문제에 대한 비판적 개념을 잃지 않습니다. 보기 대 스타일. 구성 요소를 공유하면 다른 사용자가 구성 요소를 나머지 웹 페이지와 일치시키기가 더 쉽습니다.