Latest web development tutorials

소품 반응

상태 변경은 사용자와 상호 작용하는 동안 상태와의 주요 차이점은, 불변소품 소품.일부 컨테이너 컴포넌트 업데이트 데이터를 수정하는 상태를 정의해야하는 이유이다. 서브 어셈블리는 소품을 통해 데이터를 전달할 수 있습니다.


사용 소품

다음은 어셈블리에 소품을 사용하는 방법을 보여줍니다

var HelloMessage = React.createClass({
  render: function() {
    return <h1>Hello {this.props.name}</h1>;
  }
});

ReactDOM.render(
  <HelloMessage name="w3big" />,
  document.getElementById('example')
);

»시도

This.props.name 인스턴스 이름 속성을 통해 얻을 수 있습니다.


기본 소품

다음과 같이 getDefaultProps에 의한 소품에 대한 기본 값을 () 메소드를 설정할 수 있습니다, 예는 다음과 같습니다

var HelloMessage = React.createClass({
  getDefaultProps: function() {
    return {
      name: 'w3big'
    };
  },
  render: function() {
    return <h1>Hello {this.props.name}</h1>;
  }
});

ReactDOM.render(
  <HelloMessage />,
  document.getElementById('example')
);

»시도


주 및 소품

다음은 응용 프로그램의 상태와 소품의 조합을 사용하는 방법을 보여줍니다. 우리는 상위 어셈블리의 상태를 설정할 수 있고, 서브 - 어셈블리 소품을 사용하여 서브 어셈블리로 전달된다. 렌더링 함수에서, 우리는 부모 구성 요소는 데이터를 통과 얻을 수있는 이름과 위치를 설정합니다.

var WebSite = React.createClass({
  getInitialState: function() {
    return {
      name: "本教程",
      site: "http://www.w3big.com"
    };
  },
 
  render: function() {
    return (
      <div>
        <Name name={this.state.name} />
        <Link site={this.state.site} />
      </div>
    );
  }
});

var Name = React.createClass({
  render: function() {
    return (
      <h1>{this.props.name}</h1>
    );
  }
});

var Link = React.createClass({
  render: function() {
    return (
      <a href={this.props.site}>
        {this.props.site}
      </a>
    );
  }
});

React.render(
  <WebSite />,
  document.getElementById('example')
);

»시도


소품 검증

인증propTypes를 사용하는 소품, 우리의 응용 프로그램 구성 요소가 올바르게 사용되었는지, React.PropTypes 수신 데이터가 유효 검증하는 많은 검증 (검증)를 제공 보장 할 수 있습니다.소품이 들어오는 데이터를 유효하지 않은 경우, 자바 스크립트 콘솔 경고를 발생합니다.

다음 예제에서는 문자열을 속성 제목이 필수입니다하는 myTitle이라는 구성 요소를 만들고있다이 경우 숫자는 설명한다 :

var title = "本教程";
// var title = 123;
var MyTitle = React.createClass({
  propTypes: {
    title: React.PropTypes.string.isRequired,
  },

  render: function() {
     return <h1> {this.props.title} </h1>;
   }
});
ReactDOM.render(
    <MyTitle title={title} />,
    document.getElementById('example')
);

»시도

제목이 숫자 변수를 사용하는 경우, 다음과 같은 오류 메시지가 콘솔 :

더 많은 검증은 다음과 같습니다 :

React.createClass({
  propTypes: {
    // 可以声明 prop 为指定的 JS 基本数据类型,默认情况,这些数据是可选的
   optionalArray: React.PropTypes.array,
    optionalBool: React.PropTypes.bool,
    optionalFunc: React.PropTypes.func,
    optionalNumber: React.PropTypes.number,
    optionalObject: React.PropTypes.object,
    optionalString: React.PropTypes.string,

    // 可以被渲染的对象 numbers, strings, elements 或 array
    optionalNode: React.PropTypes.node,

    //  React 元素
    optionalElement: React.PropTypes.element,

    // 用 JS 的 instanceof 操作符声明 prop 为类的实例。
    optionalMessage: React.PropTypes.instanceOf(Message),

    // 用 enum 来限制 prop 只接受指定的值。
    optionalEnum: React.PropTypes.oneOf(['News', 'Photos']),

    // 可以是多个对象类型中的一个
    optionalUnion: React.PropTypes.oneOfType([
      React.PropTypes.string,
      React.PropTypes.number,
      React.PropTypes.instanceOf(Message)
    ]),

    // 指定类型组成的数组
    optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number),

    // 指定类型的属性构成的对象
    optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number),

    // 特定 shape 参数的对象
    optionalObjectWithShape: React.PropTypes.shape({
      color: React.PropTypes.string,
      fontSize: React.PropTypes.number
    }),

    // 任意类型加上 `isRequired` 来使 prop 不可空。
    requiredFunc: React.PropTypes.func.isRequired,

    // 不可空的任意类型
    requiredAny: React.PropTypes.any.isRequired,

    // 自定义验证器。如果验证失败需要返回一个 Error 对象。不要直接使用 `console.warn` 或抛异常,因为这样 `oneOfType` 会失效。
    customProp: function(props, propName, componentName) {
      if (!/matchme/.test(props[propName])) {
        return new Error('Validation failed!');
      }
    }
  },
  /* ... */
});