>php教程 >PHP开发 >React 속성 및 상태 요약에 대한 간략한 토론

React 속성 및 상태 요약에 대한 간략한 토론

高洛峰
高洛峰원래의
2016-12-06 13:11:421403검색

1. 속성

1. 첫 번째 사용 방법: 키-값 쌍

1a235929b06f5a41b46c176b10f79f6e

< ;ClaaNameA 이름 = {Tom} />

8fc94cd3c51a6cc2081f4c4e8d43c459

e4fb5c78607e46bd4394aeb672602826//Array

783b27803c3cf58f5e79eef5156f57cf //함수 정의

2. 두 번째 방법: 3점 확장 객체 형식

var props = {
 
one :”123”,
 
tow :321
 
 }
 
<ClassNameB {…props} />

3개의 따옴표를 추가하는 것은 두 개의 속성(1개와 2개)을 얻는 것과 같습니다.

3. setProps 형식: 구성 요소를 통해 속성을 업데이트합니다. .컴포넌트 내부의 속성은 컴포넌트 설계 원칙에 위배되므로 수정할 수 없습니다. (피하십시오)

var instance =React.render(<ClassNameC ><ClaasNameC/>,document.body);
 
instance.setProps({name:”Tom" });

2. Status: 상태 사물은 지속적으로 변경됩니다/사물의 개인 속성은 사물 자체에 의해 처리됩니다

getInitialState: 각 인스턴스의 고유 상태 초기화

setState: 구성 요소 상태 업데이트

setState diff 알고리즘을 트리거합니다. 상태와 페이지 결과 간의 차이, 업데이트가 필요한지 여부를 결정합니다.

3. 상태와 속성의 비교

상태와 속성 모두 렌더링 업데이트를 트리거합니다. 순수 JS 객체입니다.

상태: 자신과 관련되어 있으며 상위 구성 요소나 하위 구성 요소의 영향을 받지 않습니다.

속성: 자체적으로는 수정할 수 없습니다. 상위 구성 요소에서 생성되며 상위 구성 요소도 해당 속성을 수정할 수 있습니다

근본적인 차이점: 구성 요소가 실행 중일 때 수정하고 유지 관리해야 하는 것은 상태입니다

4. 익숙해지기 간단한 데모:

<!DOCTYPE html>
 <html>
  <head>
   <meta http-equiv=&#39;Content-type&#39; content=&#39;text/html; charset=utf-8&#39;>
   <title>daomul&#39;s example</title>
   <link rel="stylesheet" href="../shared/css/base.css" />
  </head>
  <body>
   <h1>Text demo</h1>
  <div id="container">
 
  </div>
 
  <script src="../shared/thirdparty/es5-shim.min.js"></script>
  <script src="../shared/thirdparty/es5-sham.min.js"></script>
  <script src="../shared/thirdparty/console-polyfill.js"></script>
  <script src="../../build/react.js"></script>
  <script src="../../build/JSXTransformer.js"></script>
  <script type="text/jsx">
 
    //内容组件
    var Content = React.createClass({
     getInitialState:function(){
      return {
       inputText:&#39;&#39;,
      };
     },
     handleChange:function(event){
      this.setState({inputText:event.target.value});
     },
     handleClick:function(){
      console.log("props name is " + this.props.selectName + " \n and inputText is " + this.state.inputText);
     },
     render:function(){
 
      return <div>
       <textarea onChange = {this.handleChange} placeholder = "please input something!"></textarea>
       <button onClick = {this.handleClick}>sumbit</button>
      </div>;
     },
    });
 
    //评论组件
    var Comment = React.createClass({
     getInitialState:function(){
      return {
       names:["Tom","Axiba","daomul"],
       selectName:&#39;&#39;,
      };
     },
     handleSelect:function(){
      this.setState(
        {selectName : event.target.value}
       );
     },
     render:function(){
      var options = [];
      //往options中添加子option
      for (var option in this.state.names) {
       options.push(<option value={this.state.names[option]}> {this.state.names[option]} </option>)
      };
      return <div>
       <Content selectName = {this.state.selectName}>
       </Content>
       <select onChange = {this.handleSelect}>
        {options}
       </select>
      </div>;
     },
    });
 
    //start render
    React.render(<Comment></Comment>,document.body);
  </script>
 </body>
</html>


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.